Releases: Quick/Quick
v7.5.0 - Pending tests are now marked as Skipped in Xcode
Highlights
- Any tests which are pended-out (using
pending
,xdescribe
,xcontext
,xitBehavesLike
, orxit
), OR tests which are skipped because they are not focused (that is, the other tests when you usefdescribe
,fcontext
,fitBehavesLike
orfit
) are now marked as skipped in Xcode.
Automated Changelog
- Bump softprops/action-gh-release from 1 to 2 by @dependabot in #1274
- Mark tested which are pended-out or not focused as skipped. by @younata in #1276
Full Changelog: v7.4.1...v7.5.0
v7.4.1
What's Changed
- Bump cocoapods from 1.14.3 to 1.15.0 by @dependabot in #1265
- Corrected typo in document by @regi93 in #1267
- Bump cocoapods from 1.15.0 to 1.15.2 by @dependabot in #1269
- Respect XCTSkip and StopTest errors in beforeEach, afterEach and aroundEach by @younata in #1273
New Contributors
Full Changelog: v7.4.0...v7.4.1
v7.4.0 - visionOS support
Highlights
- Quick now supports visionOS! Thanks @stonko1994!
Autogenerated Release Notes
What's Changed
- Release script should auto-update local ruby dependencies by @younata in #1263
- Add visionOS support by @stonko1994 in #1249
New Contributors
- @stonko1994 made their first contribution in #1249
Full Changelog: v7.3.1...v7.4.0
v7.3.1
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 #1243
- Bump cocoapods from 1.12.1 to 1.13.0 by @dependabot in #1244
- Bump fkirc/skip-duplicate-actions from 5.3.0 to 5.3.1 by @dependabot in #1245
- Bump cocoapods from 1.13.0 to 1.14.2 by @dependabot in #1247
- Bump rake from 13.0.6 to 13.1.0 by @dependabot in #1248
- Consolidate Quick-macOS, Quick-iOS and Quick-tvOS into a single Quick target by @younata in #1222
- Bump danger from 9.3.2 to 9.4.1 by @dependabot in #1254
- Bump danger from 9.4.1 to 9.4.2 by @dependabot in #1257
- Bump cocoapods from 1.14.2 to 1.14.3 by @dependabot in #1252
- Build carthage artifacts as a github action. by @younata in #1259
- Add a privacy manifest by @younata in #1260
- Fix crash in AsyncSpec when using TestState by @younata in #1261
Full Changelog: v7.3.0...v7.3.1
v7.3.0
Highlights
- Adds a property wrapper default initializer for TestState. Meaning the following declaration is now accepted!
@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 #1238
- Add property wrapper default initializer for TestState by @tahirmt in #1235
- Bump actions/checkout from 3 to 4 by @dependabot in #1241
- Updated TestState to remove the value after the test. by @CraigSiemens in #1240
- Update release script to generate a carthage binary and include it in the release. by @younata in #1234
New Contributors
Full Changelog: v7.2.0...v7.3.0
v7.2.0 - TestState property wrapper
Highlight
You can now use the @TestState
property wrapper to automatically deconstruct test variables. For example:
describe("using TestState") {
@TestState var subject: SomeObject?
}
Is functionally equivalent to:
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.
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 #1233
Full Changelog: v7.1.0...v7.2.0
v7.1.0
Highlights
New Features
- You can now use
throw
inbeforeEach
,justBeforeEach
, andafterEach
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 inQuickSpec
andBehavior
.
Autogenerated ChangeLog
What's Changed
- Bump danger from 9.3.0 to 9.3.1 by @dependabot in #1224
- Ensure beforeEach in Configuration run for AsyncSpec by @junmo-kim in #1228
- Allow beforeEach, justBeforeEach, and afterEach in Swift to throw by @younata in #1229
- Improve documentation for installing Quick and Nimble via Cocoapods in the README. by @younata in #1231
- Make a public xitBehavesLike(_ name: String) for SyncDSLUser by @younata in #1230
- Attempt to run tests within a QuickSpec or AsyncSpec in the order they are defined in by @younata in #1232
New Contributors
- @junmo-kim made their first contribution in #1228
Full Changelog: v7.0.2...v7.1.0
v7.0.2
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
Full Changelog: v7.0.1...v7.0.2
7.0.1 - re-allow async calls in AsyncSpec's xit
This fixes an oversight where you couldn't use async closures with xit
. Thanks @stonko1994 for calling this out!
What's Changed
Full Changelog: v7.0.0...v7.0.1
v7.0.0 - AsyncSpec and Human-Readable Test Selectors
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:
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:
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 #1191
- (Temporarily) Remove async support from Quick by @younata in #1192
- Bump activesupport from 6.1.5 to 6.1.7.1 by @dependabot in #1196
- Bump danger from 9.1.0 to 9.2.0 by @dependabot in #1198
- Transition QuickSpec.spec to be a static method. by @younata in #1200
- Add async duplicate-world based support. by @younata in #1199
- Bump cocoapods from 1.11.3 to 1.12.0 by @dependabot in #1201
- Bump activesupport from 7.0.4.2 to 7.0.4.3 by @dependabot in #1203
- Bump fkirc/skip-duplicate-actions from 5.2.0 to 5.3.0 by @dependabot in #1188
- [Translation] AsyncAwait.md Korean translation by @tisohjung in #1204
- Update Nimble to v12 by @younata in #1206
- Demangle QuickSpec test names as much as possible by @younata in #1207
- Add mechanism to fallback to legacy test selector names by @younata in #1211
- Bump cocoapods from 1.12.0 to 1.12.1 by @dependabot in #1210
- Bump danger from 9.2.0 to 9.3.0 by @dependabot in #1209
- Don't imply that we plan to remove the option to force encoded test selector names by @younata in #1212
- Merge branch quick_7 into main. by @younata in #1213
- [doc] Corrected to class method by @coffmark in #1214
- Update the english documentation for Quick 7 by @younata in #1215
- Provide a way to get the currently running spec, regardless of if we're executing an AsyncSpec or a QuickSpec by @younata in #1216
New Contributors
- @tisohjung made their first contribution in #1204
- @coffmark made their first contribution in #1214
Full Changelog: v6.1.0...v7.0.0