Skip to content

Commit e60e915

Browse files
committed
Fix support for assertions in functions passed to Eventually and Consistently (fixes #457)
The previous version (1.14.0) introduced a change to allow `Eventually` and `Consistently` to support functions that make assertions. This was accomplished by overriding the global fail handler when running the callbacks passed to `Eventually/Consistently` in order to capture any resulting errors. Issue #457 uncovered a flaw with this approach: when multiple `Eventually`s are running concurrently they race when overriding the singleton global fail handler. 1.15.0 resolves this by requiring users who want to make assertions in `Eventually/Consistently` call backs to explicitly pass in a function that takes a `Gomega` as an argument. The passed-in `Gomega` instance can be used to make assertions. Any failures will cause `Eventually` to retry the callback. This cleaner interface avoids the issue of swapping out globals but comes at the cost of changing the contract introduced in v1.14.0. As such 1.15.0 introduces a breaking change with respect to 1.14.0 - however we expect that adoption of this feature in 1.14.0 remains limited. In addition, 1.15.0 cleans up some of Gomega's internals. Most users shouldn't notice any differences stemming from the refactoring that was made.
1 parent abcfad1 commit e60e915

30 files changed

+1820
-1502
lines changed

CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## 1.15.0
2+
3+
### Fixes
4+
The previous version (1.14.0) introduced a change to allow `Eventually` and `Consistently` to support functions that make assertions. This was accomplished by overriding the global fail handler when running the callbacks passed to `Eventually/Consistently` in order to capture any resulting errors. Issue #457 uncovered a flaw with this approach: when multiple `Eventually`s are running concurrently they race when overriding the singleton global fail handler.
5+
6+
1.15.0 resolves this by requiring users who want to make assertions in `Eventually/Consistently` call backs to explicitly pass in a function that takes a `Gomega` as an argument. The passed-in `Gomega` instance can be used to make assertions. Any failures will cause `Eventually` to retry the callback. This cleaner interface avoids the issue of swapping out globals but comes at the cost of changing the contract introduced in v1.14.0. As such 1.15.0 introduces a breaking change with respect to 1.14.0 - however we expect that adoption of this feature in 1.14.0 remains limited.
7+
8+
In addition, 1.15.0 cleans up some of Gomega's internals. Most users shouldn't notice any differences stemming from the refactoring that was made.
9+
110
## 1.14.0
211

312
### Features

env.go

-40
This file was deleted.

ghttp/test_server_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,8 @@ var _ = Describe("TestServer", func() {
259259
s.AppendHandlers(func(w http.ResponseWriter, req *http.Request) {
260260
// Expect(true).Should(BeFalse()) <-- would be nice to do it this way, but the test just can't be written this way
261261

262-
By("We're cheating a bit here -- we're throwing a GINKGO_PANIC which simulates a failed assertion")
263-
panic(GINKGO_PANIC)
262+
By("We're cheating a bit here -- we're pretending to throw a Ginkgo panic which simulates a failed assertion")
263+
panic("defer GinkgoRecover()")
264264
})
265265
})
266266

0 commit comments

Comments
 (0)