gpt4 book ai didi

node.js - 如何正确地使 jasmine-node 中的异步单元测试失败

转载 作者:行者123 更新时间:2023-12-02 10:29:57 25 4
gpt4 key购买 nike

为什么以下代码会失败并超时?看起来“应该”抛出一个错误并且done()永远不会被调用?我该如何编写这个测试才能正确失败而不是让 jasmine 报告超时?

var Promise = require('bluebird');
var should = require('chai').should();
describe('test', function () {
it('should work', function (done) {
Promise.resolve(3)
.then(function (num) {
num.should.equal(4);
done();
});
});
});

控制台输出是:

c:> Jasmine Node 规范\

未处理的拒绝断言错误:预期 3 等于 4...失败:1)测试应该有效信息:超时:WAITING规范完成 5000 毫秒后超时

最佳答案

使用.then()并且仅使用done()

it('should work', (done) => {
Promise.resolve(3).then((num) => {
// your assertions here
}).catch((err) => {
expect(err).toBeFalsy();
}).then(done);
});

使用.then()done.fail()

it('should work', (done) => {
Promise.resolve(3).then((num) => {
// your assertions here
}).then(done).catch(done.fail);
});

使用 Bluebird 协程

it('should work', (done) => {
Promise.coroutine(function *g() {
let num = yield Promise.resolve(3);
// your assertions here
})().then(done).catch(done.fail);
});

使用async/await

it('should work', async (done) => {
try {
let num = await Promise.resolve(3);
// your assertions here
done();
} catch (err) {
done.fail(err);
}
});

使用 async/await.catch()

it('should work', (done) => {
(async () => {
let num = await Promise.resolve(3);
// your assertions here
done();
})().catch(done.fail);
});

其他选项

您特别询问了jasmine-node,这就是上面示例的内容,但还有其他模块可以让您直接从测试返回 promise ,而不是调用done()done.fail() - 请参阅:

关于node.js - 如何正确地使 jasmine-node 中的异步单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com