我有一个像这样的Jasmine测试规范test_spec.js:
describe('my tests', () => {
it('POST should return 201 created', () => {
var req = {
method: 'POST',
url: '/api/v1.0/message',
payload: JSON.stringify({name: 'Ethan'})
};
server.inject(req, res => {
expect(res.statusCode).to.equal(201);
});
});
});
API调用的路由如下所示:
var routes = [{
path: '/api/v1.0/message',
method: 'POST',
handler: function(request, reply) {
reply('Success').created();
}
}];
exports.register = function(server, options, next) {
server.route(routes);
next();
}
但是,当我运行测试时,不会调用此特定测试的 expect()
函数,因为 server.inject()
方法不会调用响应回调 . 事实上,甚至没有调用路由处理程序方法(我使用console.log语句检查) . 但是,当我更改请求方法和从POST到GET的路由时,它可以工作,测试按预期调用 expect()
方法 . 该测试仅适用于POST请求 . 我做错了吗?
1 回答
事实证明问题出在我的问题中发布的测试电话
describe()
片段中 . 我忽略了在server.inject()
调用中调用done()
函数 . 一旦我添加了,POST测试开始被调用:从Jasmine文档中调用
done()
回调的需求对我来说并不明显 . 调用是必要的,以便推迟规范完成,直到调用done()
(表示已发布有效负载) .