使用 Chai expect throw 没有捕捉到 promise rejection
Using Chai expect throw not catching promise rejection
我到处搜索如何解决这个问题,但我测试的所有解决方案都不适用于我的情况。
我有一个 returns 承诺的函数,我正在尝试使用 Mocha 和 Chai 对其进行测试。
我正在对参数进行模糊测试,所以函数总是 returns:
reject('Rejection reason')
这是我正在尝试的测试 运行:
describe('fuzzing tokenization with 1000 invalid values', () => {
it('should throw an error - invalid value', async () => {
for(var i=0; i <= 1000; i++){
var req = {
body: {
value: fuzzer.mutate.string('1000000000000000')
},
user: {
displayName: user
}
};
expect(await tokenizer.tokenize(req)).to.throw(Error);
}
});
});
测试失败:
Error: the string "Invalid value." was thrown, throw an Error :)
我测试了几个变化,比如将 expect 包装成一个函数
expect(async () => { ...}).to.throw(Error);
和其他我发现的谷歌搜索。但我无法让它发挥作用。
我错过了什么?
expect().to.throw(Error)
仅适用于同步功能。如果您想要使用异步函数的类似功能,请查看 chai-as-promised
import chaiAsPromised from 'chai-as-promised';
import chai from 'chai';
chai.use(chaiAsPromised)
var expect = chai.expect;
describe('fuzzing tokenization with 1000 invalid values', () => {
it('should throw an error - invalid value', async () => {
for (var i = 0; i <= 1000; i++) {
var req = {
body: {
value: fuzzer.mutate.string('1000000000000000')
},
user: {
displayName: user
}
};
await expect(tokenizer.tokenize(req)).to.eventually.be.rejectedWith(Error);
}
});
});
我到处搜索如何解决这个问题,但我测试的所有解决方案都不适用于我的情况。
我有一个 returns 承诺的函数,我正在尝试使用 Mocha 和 Chai 对其进行测试。
我正在对参数进行模糊测试,所以函数总是 returns:
reject('Rejection reason')
这是我正在尝试的测试 运行:
describe('fuzzing tokenization with 1000 invalid values', () => {
it('should throw an error - invalid value', async () => {
for(var i=0; i <= 1000; i++){
var req = {
body: {
value: fuzzer.mutate.string('1000000000000000')
},
user: {
displayName: user
}
};
expect(await tokenizer.tokenize(req)).to.throw(Error);
}
});
});
测试失败:
Error: the string "Invalid value." was thrown, throw an Error :)
我测试了几个变化,比如将 expect 包装成一个函数
expect(async () => { ...}).to.throw(Error);
和其他我发现的谷歌搜索。但我无法让它发挥作用。
我错过了什么?
expect().to.throw(Error)
仅适用于同步功能。如果您想要使用异步函数的类似功能,请查看 chai-as-promised
import chaiAsPromised from 'chai-as-promised';
import chai from 'chai';
chai.use(chaiAsPromised)
var expect = chai.expect;
describe('fuzzing tokenization with 1000 invalid values', () => {
it('should throw an error - invalid value', async () => {
for (var i = 0; i <= 1000; i++) {
var req = {
body: {
value: fuzzer.mutate.string('1000000000000000')
},
user: {
displayName: user
}
};
await expect(tokenizer.tokenize(req)).to.eventually.be.rejectedWith(Error);
}
});
});