单元测试失败的承诺
Unit Test failing promise
我是异步编程的新手。我正在为以下示例代码编写测试用例。
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);
});
});
此测试用例失败,断言通过,然后再次完成后抛出错误。
请告诉我哪里错了?
这可能与您的错误有任何关系,也可能没有任何关系,但这看起来并不像异步代码。这样的事情可能更有意义:
const someAsync = (text) => new Promise((resolve, reject)) => {
try {
// do something and capture result
resolve(result);
} catch (err) {
reject(new Error(`Failure ${err}`));
}
})
正如estus的评论所说,我们可能需要实际错误和测试框架来进一步诊断。
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')
断言是正确的。
我是异步编程的新手。我正在为以下示例代码编写测试用例。
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);
});
});
此测试用例失败,断言通过,然后再次完成后抛出错误。 请告诉我哪里错了?
这可能与您的错误有任何关系,也可能没有任何关系,但这看起来并不像异步代码。这样的事情可能更有意义:
const someAsync = (text) => new Promise((resolve, reject)) => {
try {
// do something and capture result
resolve(result);
} catch (err) {
reject(new Error(`Failure ${err}`));
}
})
正如estus的评论所说,我们可能需要实际错误和测试框架来进一步诊断。
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')
断言是正确的。