Я прочитал документ , что chai.should () и chai.expect () должны работать одинаково, но когда я пытаюсь поймать ошибку, она кажется другой.Поскольку мое понимание того, что я могу использовать should (), чтобы утверждать цепочку обещаний как
myfunction.should.be.rejectedWith(Error)
Однако, поскольку функция будет выдавать ошибку до цепочки обещаний, ошибка не попадет в цепочку обещаний, я могуНе используйте этот метод.Затем я использую методы, описанные ниже.
Как видите,
() => myFunctionA(name).should.throw('argument name is undefine');
и
expect(() => myFunctionA(name).to.throw('Argument "stackName" is undefined');
в соответствии с документом, они должны иметь тот же эффект,или работать таким же образом, однако, первый всегда будет проходить, даже если я удалил ошибку из моего исходного кода.Это все равно пройдет.Только последний работает правильно.Кто-нибудь знает почему?У вас есть идея протестировать "Throw Error", как это?
function myFunctionA(name) {
if (!name) {
throw new Error('argument name is undefine')
}
return Promise.resolve();
}
it.only('should throw Error if name is null|undefined ', () => {
let name;
() => myFunctionA(name).should.throw('argument name is undefine'); //this would pass no matter how
() => myFunctionA(name).should.Throw('argument name is undefine'); //this would pass no matter how
expect(() => myFunctionA(name).to.throw('Argument "stackName" is undefined'); // this will do the assert properly, this is work
return myFunctionA(name).should.throw(Error);// this will failed to catch the Error
});