调用 server.inject() POST 请求未在 Hapi.js 中调用处理程序
Calling server.inject() POST request not calling handler in Hapi.js
我有一个像这样的 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 请求。我做错了吗?
原来问题出在我的问题中发布的测试调用 describe()
片段中。我忽略了在 server.inject()
调用中调用 done()
函数。添加后,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()
(意味着有效负载已发布)。
我有一个像这样的 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 请求。我做错了吗?
原来问题出在我的问题中发布的测试调用 describe()
片段中。我忽略了在 server.inject()
调用中调用 done()
函数。添加后,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()
(意味着有效负载已发布)。