我有一个像这样的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请求。我做错了吗?
答案 0 :(得分:2)
原来问题出在我的问题中发布的测试电话describe()
片段中。我忽略了在done()
调用中调用server.inject()
函数。一旦我添加了,就开始调用POST测试:
describe('my tests', () => {
it('POST should return 201 created', (done) => {
var req = {
method: 'POST',
url: '/api/v1.0/message',
payload: JSON.stringify({name: 'Ethan'})
};
server.inject(req, res => {
expect(res.statusCode).toEqual(201);
done();
});
});
});
从Jasmine文档中,我不需要调用done()
回调。调用是必要的,以便推迟规范完成,直到调用done()
(表示已发布有效负载)。