我是异步编程的新手。我正在为以下示例代码编写测试用例。
someAsync(text) {
try {
//do something and resolve result
return Promise.resolve(result);
} catch (err) {
return Promise.reject(new Error(`Failure ${err}`));
}
}
我正在使用以下代码对其进行测试:
it('should throw error when called', (done) => {
const mymodule = new MyModule(args);
mymodule.someAsync('something that causes failure').catch((err) => {
expect(err).to.exist;
expect(err.message).to.contains('This should pass');
done(err);
});
});
此测试用例失败,断言通过,然后再次执行后将引发错误。 请告诉我我要去哪里错了?
答案 0 :(得分:0)
这可能与您的错误没有任何关系,但实际上看起来并不像异步代码。这样的事情可能更有意义:
const someAsync = (text) => new Promise((resolve, reject)) => {
try {
// do something and capture result
resolve(result);
} catch (err) {
reject(new Error(`Failure ${err}`));
}
})
正如发情期的评论所说,我们可能需要实际的错误和测试框架来进一步诊断。
答案 1 :(得分:0)
done(err)
使规范失败。由于这是预期的错误,因此它不应超出规范,而应改为done()
。
Mocha不需要done
来处理承诺,可以从规范中返回承诺。
可能应该是:
it('should throw error when called', () => {
const mymodule = new MyModule(args);
return mymodule.someAsync('something that causes failure').catch((err) => {
expect(err).to.exist;
expect(err.message).to.contain('This should pass');
});
});
此外,从列出的代码中不能明显看出expect(err.message).to.contain('This should pass')
的断言是正确的。