大家好,我是测试的新手 我正在使用socket.io,我想在插入时发生某些事情时模拟我的函数抛出错误。
socket.on('request', function(request) {
bookingService.addBooking(request)
.then(function (booking) {
winston.info('Client Order saved');
io.emit('order to driver', {user: request[2], random : request[3]});
})
.catch(function (err) {
winston.error(' Client error on save order ==> '+err);
});
});
addBooking
function addBooking(msgParam) {
var deferred = Q.defer();
db.booking.insert(
{ user : msgParam[2],
adress : msgParam[0],
random : msgParam[3],
driver : [],
isTaken : false,
isDone : false,
declineNbr : 0 ,
createdOn : msgParam[1],
createdBy : msgParam[2],
updatedOn : null,
updatedBy : []},
function (err, doc) {
if (err) deferred.reject(err.name + ': ' + err.message);
deferred.resolve();
});
return deferred.promise;
}
我试图只测试addBokking函数
it('should throw error if something wrong happend on adding new order ', function(done){
(bookingService.addBooking(request)).should.throw()
done();
});
但我收到此错误
AssertionError: expected { state: 'pending' } to be a function
答案 0 :(得分:0)
您可以在chai中使用以下语法:
it("throw test", () => {
expect(()=>{myMethodThatWillThrowError()}).to.throw();
});
对于承诺,您可以使用以下模式:
it("should throw on unsuccessfull request", (done: MochaDone) => {
repo.patch({
idOrPath: "Root/Sites/Default_Site",
content: ConstantContent.PORTAL_ROOT,
}).then(() => {
done("Should throw"); // The test will fail with the "Should throw" error
}).catch(() => {
done(); // The test will report success
});
});
答案 1 :(得分:0)
此错误:
AssertionError:期望{state:' pending'成为一个函数
...表示您正在检查从addBooking
函数返回的承诺,而不是承诺的已解决/拒绝结果。
使用chai-as-promised,您可以轻松完成!
对于chai-as-promise,这些应该起作用(例如文档):
return promise.should.be.rejected;
return promise.should.be.rejectedWith(Error); // other variants of Chai's `throw` assertion work too.
或在您的特定情况下(在安装和连接chai-as-promised之后),这应该有效:
(bookingService.addBooking(request)).should.be.rejected
(也许should.throw()
也可以使用chai-as-promised,我对它不太熟悉)