gpt4 book ai didi

testing - 在 Hapi.js 中调用 server.inject() POST 请求不调用处理程序

转载 作者:行者123 更新时间:2023-11-28 20:29:07 25 4
gpt4 key购买 nike

我有一个像这样的 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()(意味着有效负载已发布)。

关于testing - 在 Hapi.js 中调用 server.inject() POST 请求不调用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com