问题
Say that I got some basic assert as below:
expect(myObject.getValue()).to.equal(5);
And the returned value from myObject.getValue()
should be 5
after several code running over some other place, so I just need to let this value
to be updated.
My question is, what is the code for creating this kind of test?
回答1:
Mocha has a facility for retrying tests. You can just use this.retries(number_of_tries)
in your test. Like this:
it("something", function () {
this.retries(10);
expect(myObject.getValue()).to.equal(5);
});
You can also use it in a describe
block if you want to set the number of retries for an entire set of tests. Note that if you use this.retries
, it cannot appear in an arrow function (() => ...
) because arrow functions let this
remain the value it had in the scope in which the arrow function appeared. You must use a full function (function () ...
).
回答2:
For greater precision over what is being retried use the retry-assert library:
const activeUser = await retry()
.fn(() => getUser(id))
.until(user => expect(user).toHaveProperty('active', true))
Retrying the entire test is too coarse grained when writing higher level functional tests - for example when testing APIs that have asynchronous state changes - and is not an option with CucumberJS. Retry Assert works with any test runner and will give meaningful error messages when your retried assertion fails too many times.
Disclaimer: I'm the author of retry-assert.
来源:https://stackoverflow.com/questions/42386037/how-to-call-assert-for-several-time-until-its-true