【发布时间】:2016-07-28 01:19:42
【问题描述】:
我有一个这样的 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 请求。我做错了吗?
【问题讨论】:
-
您能否制作一个完整的可运行示例(如果它很大,请从您的应用中提取)而不是 sn-ps?
-
我结合了路由定义和路由处理程序来简化代码。如果我还要在这里粘贴 Hapi 样板代码,它会变得笨拙。为了复制这一点,基本上只需要一个 Hapi 样板并插入上述路由 + 处理程序。然后编写上面的Jasmine测试,在终端通过
jasmine命令执行。 -
我不同意。如果您提供一个我们可以运行的最小工作示例,它会更容易提供帮助。我不能对上述内容做太多,因为它看起来不错。您的问题可能不在您提供的范围内。
-
你是对的。我花时间生成绝对最小的示例并且它在那里工作,所以这必须与代码中的其他内容相关联。很奇怪。当我发现它是什么时,我会在这里报告,以防它可以帮助其他人。谢谢!