【问题标题】:How to get asserts in mocha before blocks to work?如何在块工作之前在 mocha 中获取断言?
【发布时间】:2017-01-14 03:29:56
【问题描述】:

如何在块工作之前在 mocha 中获取断言?如果我不打算这样做,请告诉我。目前,使用 Promise,如果我在使用 catch 块时遇到错误,我将添加一个断言以使 before 块失败。我想要的是它使描述块失败,但我得到了两种可能的结果。 1. 我的测试套件完全崩溃,2. 因为 before 块失败,我必须等待每次超时来完成每个测试。

before(function (done) {
    promise()
        .then(function () {
            done();
        })
        .catch(function (error) {
            assert(!error);
            done();
        });
});

我什至试过这个,想,也许 done 从来没有被调用过。

before(function (done) {
    promise()
        .then(function () {
            //no done here
        })
        .catch(function (error) {
            assert(!error);
        });
        .finally(function () {
            done();
        });
});

到目前为止,为了避免崩溃和等待,并使其正常工作,我已经这样做了:

var beforeError;
before(function (done) {
    promise()
        .then(function () {
            done();
        })
        .catch(function (error) {
            beforeError = error;
            done();
        });
});

it('test something', function () {
    assert(beforeError, 'Before block failed with error.');
});

我真的很好奇是否有更好的方法来解决这个问题,这样如果我的 before/beforeEach/after/afterEach 块失败,它不会导致我等待很长时间或我的套件崩溃!感谢 S/O 社区! :)

【问题讨论】:

  • 只需调用完成错误。 done(err)

标签: javascript node.js crash mocha.js


【解决方案1】:

我无法谈论您对done 回调的使用,但mocha 3.0 现在支持promises in before hooks。如果我写这个,我会让返回的 Promise 抛出它自己的错误,这将使 before 钩子失败而不会破坏套件。

before(function () {
    return promise(<async behavior here>);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多