@@ -118,17 +118,18 @@ func buildDescription(explain ...interface{}) string {
118
118
// is passed in. For example, errors can be checked with ExpectNoError:
119
119
//
120
120
// cb := func(func(tCtx ktesting.TContext) int {
121
- // value, err := doSomething(...)
122
- // ktesting.ExpectNoError(tCtx, err, "something failed")
123
- // return value
121
+ // value, err := doSomething(...)
122
+ // tCtx.ExpectNoError(err, "something failed")
123
+ // assert(tCtx, 42, value, "the answer")
124
+ // return value
124
125
// }
125
126
// tCtx.Eventually(cb).Should(gomega.Equal(42), "should be the answer to everything")
126
127
//
127
128
// If there is no value, then an error can be returned:
128
129
//
129
130
// cb := func(func(tCtx ktesting.TContext) error {
130
- // err := doSomething(...)
131
- // return err
131
+ // err := doSomething(...)
132
+ // return err
132
133
// }
133
134
// tCtx.Eventually(cb).Should(gomega.Succeed(), "foobar should succeed")
134
135
//
@@ -143,28 +144,37 @@ func buildDescription(explain ...interface{}) string {
143
144
// anymore, use [gomega.StopTrying]:
144
145
//
145
146
// cb := func(func(tCtx ktesting.TContext) int {
146
- // value, err := doSomething(...)
147
- // if errors.Is(err, SomeFinalErr) {
148
- // gomega.StopTrying("permanent failure).Wrap(err).Now()
149
- // }
150
- // ktesting.ExpectNoError(tCtx, err, "something failed")
151
- // return value
147
+ // value, err := doSomething(...)
148
+ // if errors.Is(err, SomeFinalErr) {
149
+ // // This message completely replaces the normal
150
+ // // failure message and thus should include all
151
+ // // relevant information.
152
+ // //
153
+ // // github.com/onsi/gomega/format is a good way
154
+ // // to format arbitrary data. It uses indention
155
+ // // and falls back to YAML for Kubernetes API
156
+ // // structs for readability.
157
+ // gomega.StopTrying("permanent failure, last value:\n%s", format.Object(value, 1 /* indent one level */)).
158
+ // Wrap(err).Now()
159
+ // }
160
+ // ktesting.ExpectNoError(tCtx, err, "something failed")
161
+ // return value
152
162
// }
153
163
// tCtx.Eventually(cb).Should(gomega.Equal(42), "should be the answer to everything")
154
164
//
155
165
// To poll again after some specific timeout, use [gomega.TryAgainAfter]. This is
156
166
// particularly useful in [Consistently] to ignore some intermittent error.
157
167
//
158
168
// cb := func(func(tCtx ktesting.TContext) int {
159
- // value, err := doSomething(...)
160
- // var intermittentErr SomeIntermittentError
161
- // if errors.As(err, &intermittentErr) {
162
- // gomega.TryAgainAfter(intermittentErr.RetryPeriod).Wrap(err).Now()
163
- // }
164
- // ktesting.ExpectNoError(tCtx, err, "something failed")
165
- // return value
166
- // }
167
- // tCtx.Eventually(cb).Should(gomega.Equal(42), "should be the answer to everything")
169
+ // value, err := doSomething(...)
170
+ // var intermittentErr SomeIntermittentError
171
+ // if errors.As(err, &intermittentErr) {
172
+ // gomega.TryAgainAfter(intermittentErr.RetryPeriod).Wrap(err).Now()
173
+ // }
174
+ // ktesting.ExpectNoError(tCtx, err, "something failed")
175
+ // return value
176
+ // }
177
+ // tCtx.Eventually(cb).Should(gomega.Equal(42), "should be the answer to everything")
168
178
func Eventually [T any ](tCtx TContext , cb func (TContext ) T ) gomega.AsyncAssertion {
169
179
tCtx .Helper ()
170
180
return gomega .NewWithT (tCtx ).Eventually (tCtx , func (ctx context.Context ) (val T , err error ) {
0 commit comments