怎么称断断续续几次直到它是真的?

时间:2017-02-22 08:17:14

标签: node.js mocha chai

说我得到了一些基本断言如下:

expect(myObject.getValue()).to.equal(5);

在多个代码在其他地方运行后,myObject.getValue()返回的值应为5,因此我只需要更新此value

我的问题是,创建此类测试的代码是什么?

2 个答案:

答案 0 :(得分:1)

Mocha有retrying tests的设施。您可以在测试中使用this.retries(number_of_tries)。像这样:

it("something", function () {
    this.retries(10);
    expect(myObject.getValue()).to.equal(5);
});

如果要设置整组测试的重试次数,也可以在describe块中使用它。请注意,如果您使用this.retries,则它不会出现在箭头函数(() => ...)中,因为箭头函数让this保持其在箭头函数出现的范围内的值。您必须使用完整功能(function () ...)。

答案 1 :(得分:0)

要获得更高的重试精度,请使用retry-assert库:

const activeUser = await retry()
    .fn(() => getUser(id))
    .until(user => expect(user).toHaveProperty('active', true))

在编写更高级别的功能测试时(例如,在测试具有异步状态更改的API时),重试整个测试的粒度太粗糙了,而CucumberJS则不行。重试断言可与任何测试运行程序一起使用,并且当您的重试断言失败太多次时,它将给出有意义的错误消息。

免责声明:我是retry-assert的作者。