The markdown parsing is broken/disabled for release notes. Sorry about that, I'm chasing the source of a crash that's been bringing this website down for the last couple of days.
v7.5.0 - Pending tests are now marked as Skipped in Xcode
4 weeks ago
## Highlights
- Any tests which are pended-out (using `pending`, `xdescribe`, `xcontext`, `xitBehavesLike`, or `xit`), OR tests which are skipped because they are not focused (that is, the **other** tests when you use `fdescribe`, `fcontext`, `fitBehavesLike` or `fit`) are now marked as skipped in Xcode.
## Automated Changelog
* Bump softprops/action-gh-release from 1 to 2 by @dependabot in https://github.com/Quick/Quick/pull/1274
* Mark tested which are pended-out or not focused as skipped. by @younata in https://github.com/Quick/Quick/pull/1276
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.4.1...v7.5.0
## What's Changed
* Bump cocoapods from 1.14.3 to 1.15.0 by @dependabot in https://github.com/Quick/Quick/pull/1265
* Corrected typo in document by @regi93 in https://github.com/Quick/Quick/pull/1267
* Bump cocoapods from 1.15.0 to 1.15.2 by @dependabot in https://github.com/Quick/Quick/pull/1269
* Respect XCTSkip and StopTest errors in beforeEach, afterEach and aroundEach by @younata in https://github.com/Quick/Quick/pull/1273
## New Contributors
* @regi93 made their first contribution in https://github.com/Quick/Quick/pull/1267
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.4.0...v7.4.1
v7.4.0 - visionOS support
13 weeks ago
# Highlights
- Quick now supports visionOS! Thanks @stonko1994!
# Autogenerated Release Notes
## What's Changed
* Release script should auto-update local ruby dependencies by @younata in https://github.com/Quick/Quick/pull/1263
* Add visionOS support by @stonko1994 in https://github.com/Quick/Quick/pull/1249
## New Contributors
* @stonko1994 made their first contribution in https://github.com/Quick/Quick/pull/1249
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.3.1...v7.4.0
# Highlights
- Fixes a crash in AsyncSpec caused by race condition when unsetting AsyncSpec.current.
# Autogenerated Release Notes
## What's Changed
* Bump danger from 9.3.1 to 9.3.2 by @dependabot in https://github.com/Quick/Quick/pull/1243
* Bump cocoapods from 1.12.1 to 1.13.0 by @dependabot in https://github.com/Quick/Quick/pull/1244
* Bump fkirc/skip-duplicate-actions from 5.3.0 to 5.3.1 by @dependabot in https://github.com/Quick/Quick/pull/1245
* Bump cocoapods from 1.13.0 to 1.14.2 by @dependabot in https://github.com/Quick/Quick/pull/1247
* Bump rake from 13.0.6 to 13.1.0 by @dependabot in https://github.com/Quick/Quick/pull/1248
* Consolidate Quick-macOS, Quick-iOS and Quick-tvOS into a single Quick target by @younata in https://github.com/Quick/Quick/pull/1222
* Bump danger from 9.3.2 to 9.4.1 by @dependabot in https://github.com/Quick/Quick/pull/1254
* Bump danger from 9.4.1 to 9.4.2 by @dependabot in https://github.com/Quick/Quick/pull/1257
* Bump cocoapods from 1.14.2 to 1.14.3 by @dependabot in https://github.com/Quick/Quick/pull/1252
* Build carthage artifacts as a github action. by @younata in https://github.com/Quick/Quick/pull/1259
* Add a privacy manifest by @younata in https://github.com/Quick/Quick/pull/1260
* Fix crash in AsyncSpec when using TestState by @younata in https://github.com/Quick/Quick/pull/1261
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.3.0...v7.3.1
## Highlights
- Adds a property wrapper default initializer for TestState. Meaning the following declaration is now accepted!
```swift
@TestState var foo: Int! = 30
```
Thanks @tahirmt!
- TestState now nils out the value after all afterEach blocks run, instead of in the middle of the afterEach chain. Thanks @CraigSiemens
## What's Changed
* Bump activesupport from 7.0.4.3 to 7.0.7.2 by @dependabot in https://github.com/Quick/Quick/pull/1238
* Add property wrapper default initializer for TestState by @tahirmt in https://github.com/Quick/Quick/pull/1235
* Bump actions/checkout from 3 to 4 by @dependabot in https://github.com/Quick/Quick/pull/1241
* Updated TestState to remove the value after the test. by @CraigSiemens in https://github.com/Quick/Quick/pull/1240
* Update release script to generate a carthage binary and include it in the release. by @younata in https://github.com/Quick/Quick/pull/1234
## New Contributors
* @tahirmt made their first contribution in https://github.com/Quick/Quick/pull/1235
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.2.0...v7.3.0
v7.2.0 - TestState property wrapper
38 weeks ago
# Highlight
You can now use the `@TestState` property wrapper to automatically deconstruct test variables. For example:
```swift
describe("using TestState") {
@TestState var subject: SomeObject?
}
```
Is functionally equivalent to:
```swift
describe("using TestState") {
var subject: SomeObject?
afterEach {
subject = nil
}
}
```
You can also specify an initial value, and `TestState` will act as an `aroundEach`: setting the wrapped variable to the value, then setting it to nil at test teardown.
```swift
describe("using TestState") {
@TestState(1) var value: Int?
it("is already configured") {
expect(value).to(equal(1))
}
}
```
Thanks @CraigSiemens for their contribution!
# Automated Release Notes
## What's Changed
* Added a TestState property wrapper, again :D by @CraigSiemens in https://github.com/Quick/Quick/pull/1233
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.1.0...v7.2.0
# Highlights
## New Features
- You can now use `throw` in `beforeEach`, `justBeforeEach`, and `afterEach` blocks.
- Quick now suggests to XCTest that tests run in the order they are defined in.
## Fixes
- `beforeEach` blocks specified in configurations are now run in AsyncSpec tests.
- `xitBehavesLike(_ name: String)` is now available in `QuickSpec` and `Behavior`.
# Autogenerated ChangeLog
## What's Changed
* Bump danger from 9.3.0 to 9.3.1 by @dependabot in https://github.com/Quick/Quick/pull/1224
* Ensure beforeEach in Configuration run for AsyncSpec by @junmo-kim in https://github.com/Quick/Quick/pull/1228
* Allow beforeEach, justBeforeEach, and afterEach in Swift to throw by @younata in https://github.com/Quick/Quick/pull/1229
* Improve documentation for installing Quick and Nimble via Cocoapods in the README. by @younata in https://github.com/Quick/Quick/pull/1231
* Make a public xitBehavesLike(_ name: String) for SyncDSLUser by @younata in https://github.com/Quick/Quick/pull/1230
* Attempt to run tests within a QuickSpec or AsyncSpec in the order they are defined in by @younata in https://github.com/Quick/Quick/pull/1232
## New Contributors
* @junmo-kim made their first contribution in https://github.com/Quick/Quick/pull/1228
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.0.2...v7.1.0
This is a bug fix release that primarily fixes a conflict in how Nimble defines `FileString` and how Quick defines `FileString` when you use both via Swift Package Manager. It also fixes a number of warnings people who install Quick via Swift Package Manager on Darwin will receive.
## What's Changed
* Correct a few places where we falsely assume "SWIFT_PACKAGE" == not darwin by @younata in https://github.com/Quick/Quick/pull/1223
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.0.1...v7.0.2
7.0.1 - re-allow async calls in AsyncSpec's xit
46 weeks ago
This fixes an oversight where you couldn't use async closures with `xit`. Thanks @stonko1994 for calling this out!
## What's Changed
* Allow xit in the Async DSL to take in async closures by @younata in https://github.com/Quick/Quick/pull/1220
**Full Changelog**: https://github.com/Quick/Quick/compare/v7.0.0...v7.0.1
v7.0.0 - AsyncSpec and Human-Readable Test Selectors
48 weeks ago
# Highlights
## Async Test Changes
Quick 7 changes how Async tests are run. Instead of forcing all tests to run in an async context, Quick 7 provides a separate Spec class for Async Tests. Create an `AsyncSpec` subclass, and all tests inside of that subclass will run in an async context. Tests inside of `QuickSpec` subclasses will have a similar behavior to what was in Quick 5.
Additionally, Quick 7 changes how the DSL is defined slightly. In Quick 6 and before, the DSL was defined as a series of global functions, available to be called anywhere. In Quick 7, these functions were moved to be static methods on the new `SyncDSLUser` (which `QuickSpec`, `Behavior`, and `QuickConfiguration` conform to) and `AsyncDSLUser` (which `AsyncSpec` and `AsyncBehavior` conform to) protocols. This allows us to make sure that you are using the correct DSL for the context, and was necessary for this approach.
For example:
```swift
class SynchronousSpec: QuickSpec {
override class func spec() {
it("runs synchronously, as you'd expect") {
var ocean: [String] = []
DispatchQueue.main.async {
ocean.append("dolphins")
ocean.append("whales")
}
expect(ocean).toEventually(contain("dolphins", "whales"))
}
}
}
actor OceanActor<T> {
var contents: [T] = []
func append(_ value: T) {
contents.append(value)
}
}
class AsynchronousSpec: AsyncSpec {
override class func spec() {
it("runs the test in an async context") {
let ocean = OceanActor<String>()
Task {
await ocean.append("dolphins")
await ocean.append("whales")
}
await expect { await ocean.contents }.toEventually(contain("dolphins", "whales"))
}
}
}
```
## Unencoded Test Selectors
Furthermore, Quick 7 changes how test selectors are generated for `QuickSpec`. Now, both `AsyncSpec` and `QuickSpec` will use the unencoded test names as the test selectors. Test selectors are now generated by joining the `describe`/`context` blocks leading up to the `it` block with ", ". This makes test names immensely easier to read. For example, with the following spec:
```swift
class MySpec: QuickSpec {
override class func spec() {
describe("some feature") {
context("in one case") {
it("has a behavior") {}
}
context("in another case") {
it("doesn't have the earlier behavior") {}
}
}
}
}
```
will generate the following test selectors:
- `some feature, in one case, has a behavior`
- `some feature, in another case, doesn't have the earlier behavior`
You can disable this change by setting the `QUICK_USE_ENCODED_TEST_SELECTOR_NAMES` environment variable.
## Migrating Suggestions
Quick 7 is not a drop-in migration from either Quick 5 or Quick 6. Quick 5 users will have a slightly easier time upgrading, but due to `spec` being defined as a class method instead of an instance method, there will still be changes.
Doing a Find & Replace of `override func spec` with `override class func spec` will take care of the low-hanging fruit. If you have any test helpers that exist as properties or methods of your QuickSpec subclasses, the you will need to either move them inside of the `spec` function, or outside to another scope. For Objective-C users, this is, for the most part, a drop-in replacement. You will only need to do anything if you do not use the `QuickSpecBegin` and `QuickSpecEnd` macros (in which case: do a find & replace of the regex `-(\s*)\(void\)(\s*)spec` with `+$1(void)$2spec`).
For migrating from Quick 6 to Quick 7, it would be easiest to also do a Find & Replace of `: QuickSpec` to `: AsyncSpec`, then migrate tests that do not need to run in async contexts to be `QuickSpec`s themselves.
# Auto-Generated Changelog
## What's Changed
* Bump git from 1.12.0 to 1.13.0 by @dependabot in https://github.com/Quick/Quick/pull/1191
* (Temporarily) Remove async support from Quick by @younata in https://github.com/Quick/Quick/pull/1192
* Bump activesupport from 6.1.5 to 6.1.7.1 by @dependabot in https://github.com/Quick/Quick/pull/1196
* Bump danger from 9.1.0 to 9.2.0 by @dependabot in https://github.com/Quick/Quick/pull/1198
* Transition QuickSpec.spec to be a static method. by @younata in https://github.com/Quick/Quick/pull/1200
* Add async duplicate-world based support. by @younata in https://github.com/Quick/Quick/pull/1199
* Bump cocoapods from 1.11.3 to 1.12.0 by @dependabot in https://github.com/Quick/Quick/pull/1201
* Bump activesupport from 7.0.4.2 to 7.0.4.3 by @dependabot in https://github.com/Quick/Quick/pull/1203
* Bump fkirc/skip-duplicate-actions from 5.2.0 to 5.3.0 by @dependabot in https://github.com/Quick/Quick/pull/1188
* [Translation] AsyncAwait.md Korean translation by @tisohjung in https://github.com/Quick/Quick/pull/1204
* Update Nimble to v12 by @younata in https://github.com/Quick/Quick/pull/1206
* Demangle QuickSpec test names as much as possible by @younata in https://github.com/Quick/Quick/pull/1207
* Add mechanism to fallback to legacy test selector names by @younata in https://github.com/Quick/Quick/pull/1211
* Bump cocoapods from 1.12.0 to 1.12.1 by @dependabot in https://github.com/Quick/Quick/pull/1210
* Bump danger from 9.2.0 to 9.3.0 by @dependabot in https://github.com/Quick/Quick/pull/1209
* Don't imply that we plan to remove the option to force encoded test selector names by @younata in https://github.com/Quick/Quick/pull/1212
* Merge branch quick_7 into main. by @younata in https://github.com/Quick/Quick/pull/1213
* [doc] Corrected to class method by @coffmark in https://github.com/Quick/Quick/pull/1214
* Update the english documentation for Quick 7 by @younata in https://github.com/Quick/Quick/pull/1215
* Provide a way to get the currently running spec, regardless of if we're executing an AsyncSpec or a QuickSpec by @younata in https://github.com/Quick/Quick/pull/1216
## New Contributors
* @tisohjung made their first contribution in https://github.com/Quick/Quick/pull/1204
* @coffmark made their first contribution in https://github.com/Quick/Quick/pull/1214
**Full Changelog**: https://github.com/Quick/Quick/compare/v6.1.0...v7.0.0