Javascript 摩卡咖啡测试-罐装';使用async/await无法通过被拒绝承诺的测试
使用mocha和chai,我试图通过第二次测试来获得被拒绝的承诺,但是我得到了这个错误Javascript 摩卡咖啡测试-罐装';使用async/await无法通过被拒绝承诺的测试,javascript,async-await,promise,mocha.js,chai,Javascript,Async Await,Promise,Mocha.js,Chai,使用mocha和chai,我试图通过第二次测试来获得被拒绝的承诺,但是我得到了这个错误错误:字符串“error”被抛出,抛出一个错误 function fn(arg) { return new Promise((resolve, reject) => { if (arg) { resolve('success') } else { reject('error') } }) } describe('Interpreting statu
错误:字符串“error”被抛出,抛出一个错误
function fn(arg) {
return new Promise((resolve, reject) => {
if (arg) {
resolve('success')
} else {
reject('error')
}
})
}
describe('Interpreting status', function() {
it('should return the promise without error', async function(){
const arg = true
expect(await fn(arg)).to.equal('success')
});
it('should return the promise with an error', async function(){
const arg = false
expect(await fn(arg)).to.be.rejectedWith('error')
});
});
这对我来说非常有效
const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));
function fn(arg) {
return new Promise((resolve, reject) => {
if (arg) {
resolve('success');
} else {
reject(new Error('error'));
}
});
}
describe('Interpreting status', function () {
it('should return the promise without error', async function () {
const arg = true;
expect(await fn(arg)).to.equal('success');
});
it('should return the promise with an error', async function () {
const arg = false;
await expect(fn(arg)).to.be.rejectedWith(Error);
});
});
第二次测试的问题是,当您执行wait fn(arg)
时,会抛出一个错误,而不是您期望的被拒绝的承诺。
因此,您会看到消息Error:string“Error”被抛出,抛出一个错误:)
请记住,如果您等待
拒绝承诺,则会抛出一个错误,必须使用try…catch处理该错误
因此,如果您想使用rejectedWith
进行测试,那么不要使用async/await
此外,无论何时进行承诺拒绝,都应该使用错误而不是字符串进行拒绝。
我已将拒绝值更改为newerror('Error')
,并在rejectedWith
如果您严格按照您的用例进行操作,这应该适用于第二次测试,
it('should return the promise with an error', async function () {
const arg = false;
try {
await fn(arg);
expect.fail();
} catch (error) {
expect(error).to.equal('error');
}
});
这对我来说非常有效
const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));
function fn(arg) {
return new Promise((resolve, reject) => {
if (arg) {
resolve('success');
} else {
reject(new Error('error'));
}
});
}
describe('Interpreting status', function () {
it('should return the promise without error', async function () {
const arg = true;
expect(await fn(arg)).to.equal('success');
});
it('should return the promise with an error', async function () {
const arg = false;
await expect(fn(arg)).to.be.rejectedWith(Error);
});
});
第二次测试的问题是,当您执行wait fn(arg)
时,会抛出一个错误,而不是您期望的被拒绝的承诺。
因此,您会看到消息Error:string“Error”被抛出,抛出一个错误:)
请记住,如果您等待
拒绝承诺,则会抛出一个错误,必须使用try…catch处理该错误
因此,如果您想使用rejectedWith
进行测试,那么不要使用async/await
此外,无论何时进行承诺拒绝,都应该使用错误而不是字符串进行拒绝。
我已将拒绝值更改为newerror('Error')
,并在rejectedWith
如果您严格按照您的用例进行操作,这应该适用于第二次测试,
it('should return the promise with an error', async function () {
const arg = false;
try {
await fn(arg);
expect.fail();
} catch (error) {
expect(error).to.equal('error');
}
});
如果你等待承诺,你会得到一个错误,而不是被拒绝的承诺。如果你等待承诺,你会得到一个错误,而不是被拒绝的承诺。