Package - Quick/Quick

Build Status CocoaPods Carthage Compatible Platforms

Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo.

// Swift

import Quick
import Nimble

class TableOfContentsSpec: QuickSpec {
  override func spec() {
    describe("the 'Documentation' directory") {
      it("has everything you need to get started") {
        let sections = Directory("Documentation").sections
        expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups"))
        expect(sections).to(contain("Installing Quick"))
      }

      context("if it doesn't have what you're looking for") {
        it("needs to be updated") {
          let you = You(awesome: true)
          expect{you.submittedAnIssue}.toEventually(beTruthy())
        }
      }
    }
  }
}

Nimble

Quick comes together with Nimble — a matcher framework for your tests. You can learn why XCTAssert() statements make your expectations unclear and how to fix that using Nimble assertions here.

Swift Version

Certain versions of Quick and Nimble only support certain versions of Swift. Depending on which version of Swift your project uses, you should use specific versions of Quick and Nimble. Use the table below to determine which versions of Quick and Nimble are compatible with your project.

|Swift version |Quick version |Nimble version | |:--------------------|:---------------|:--------------| |Swift 3 |v1.0.0 or later |v5.0.0 or later| |Swift 2.2 / Swift 2.3|v0.9.3 |v4.1.0 |

Documentation

All documentation can be found in the Documentation folder, including detailed installation instructions for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and Nimble using CocoaPods by adding the following to your Podfile:

# Podfile

use_frameworks!

target "MyApp" do
  # Normal libraries

  abstract_target 'Tests' do
    inherit! :search_paths
    target "MyAppTests"
    target "MyAppUITests"

    pod 'Quick'
    pod 'Nimble'
  end
end

Projects using Quick

Over ten-thousand apps use either Quick and Nimble however, as they are not included in the app binary, neither appear in “Top Used Libraries” blog posts. Therefore, it would be greatly appreciated to remind contributors that their efforts are valued by compiling a list of organizations and projects that use them.

Does your organization or project use Quick and Nimble? If yes, please add your project to the list.

Who uses Quick

Similar to projects using Quick, it would be nice to hear why people use Quick and Nimble. Are there features you love? Are there features that are just okay? Are there some features we have that no one uses?

Have something positive to say about Quick (or Nimble)? If yes, provide a testimonial here.

License

Apache 2.0 license. See the LICENSE file for details.

Github

link
Stars: 7047

Advertisement

Releases

v1.2.0 - Sep 28, 2017

This release fully supports Xcode 9 (both Swift 3.2 and Swift 4) and still works with Xcode 8.3 + Swift 3.1! :tada:

New Features

  • Introduce Behavior<Context> #701 (Thanks @mosamer)
  • Support Xcode 9 / Swift 4 #711, #721, #730, #735 (Thanks @ikesyo, @sharplet)

Changes

  • Performance improvment for large test suites #697 (Thanks @dbarden)
  • Better conformance to SwiftLint (Thanks @ecylo, @ikesyo, @nasakinmaxim, @wongzigii)

Documentation Changes

  • Fix japanese document typo #738 (Thanks @AcaiBowl)

Bugfixes

  • SwiftLint will be executed only on builds for testing #694 (Thanks @nerd0geek1)
  • Fix SwiftPM integration with generated Xcode projects #708 (Thanks @ikesyo)
  • Fix SPM integration #746 (Thanks @sunshinejr)

v1.1.0 - Feb 9, 2017

This release works with Xcode 8.2 + Swift 3.

New Features

  • Adds `fitBehavesLike to allow focusing of specific instantiations of shared examples (Thanks @wongzigii)
  • Add SwiftPM support on macOS (Thanks @ikesyo)
  • Add Documentation about Shared Examples in Portuguese (Thanks @pedrovereza)

Changes

  • SharedExampleContext is now [String: Any] instead of NSDictionary (Thanks @devdrey)
  • Better conformance to SwiftLint (Thanks @ikesyo, @wongzigii)

Bugfixes

  • Quick no longer prints warnings if SwiftLint is not installed (Thanks @wongzigii)
  • Fix bug where Quick didn't work with test bundles with non-c99 valid identifiers (Thanks @MP0w)

v1.0.0 - Nov 22, 2016

Ah, we finally reached 1.0.0! Other than the official christening of a major version, there's mostly smaller code changes from v0.10.0. From here on out, we'll be following semantic versioning rules like Nimble.

This release is intended to work with Xcode 8.1 / Swift 3.

Changes

  • Fix bug where test modules with spaces failed to run tests
  • Remove dependency on Nimble for Swift Package Manager

Documentation Changes

  • Add version table for Quick / Nimble versions to Swift versions in README
  • Update docs for testing with mocks / doubles
  • Update function prototypes for shared examples
  • Update docs for setting up with Xcode
  • Add section about who uses Quick. Feel free to add yourself or add a testimonial!
  • Add shared examples documentation in zh-cn (Chinese)
  • Add behavioral testing in pt-BR (Portuguese)
  • Add README in pt-BR (Portuguese)

See the documentation directory for a list of languages or contribute one!

Thanks to @takecian, @ikesyo, @pedrovereza, @CodingItWrong, @istx25, @MP0w, @wongzigii, @rastersize, @marciok and the many contributors leading up to 1.0.0! 👏🏽

v0.10.0 - Sep 23, 2016

This release supports Swift 3.

Other changes:

  • Improve documentation. Thanks @takecian, @istx25, @wongzigii!
  • Add more documentation in Chinese. Thanks @linshiwei!

Special Thanks to @ikesyo, @briancroom, @norio-nomura, @knellr, @andersio, @kylef for all the work of getting Quick to work with Swift 3.

v0.9.3 - Jul 29, 2016

This release supports Xcode 8 beta and Swift 2.3.

Changes:

  • Support Xcode 8 beta and Swift 2.3. Thanks, @ikesyo and @sharplet!
  • Fixed a potential crash, in which a QuickSpec subclass could call +[QuickSpec initialize], thus kicking off an infinite recursion. Thanks, @briancroom!
  • Disables bitcode on tvOS. Thanks, @phatblat!