实验室测试,server.js总是返回404状态
hapi.js Lab testing, server.js always returns 404 status
我正在评估happi .js。一切都很顺利,直到我开始编写测试。基本上,我试着测试状态码作为第一步。然而,我不能继续下去了。服务器。Inject总是返回404。我通过运行服务器并使用fiddler(一种类似于postman的http请求模拟工具)发送http请求来测试相同的代码。这是成功的。我不知道我做错了什么。我正在遵循许多在线教程中的确切步骤。测试代码如下:
var Lab = require("lab");
var server = require("../server/index.js").server;
var lab = exports.lab = Lab.script();
var code = require("code");
lab.test("home", function (done) {
var options = {
method: "GET",
url: "/"
}
server.inject(options, function (response) {
var result = response.result;
code.expect(response.statusCode).to.equal(200);
done();
});
});
断言似乎从未成功传递,我已经确保路由可用。
编辑:正如Matt Harrison正确指出的那样,我实际上是异步加载路由的。
如何在这些场景中进行测试?
你的测试看起来一切正常。为了证明这一点,如果你把它放在index.js文件中,它应该可以工作:
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
reply('ok');
}
});
exports.server = server;
没有看到你的index.js
文件中发生了什么,我只能做一个有根据的猜测。
一种可能性是,您正在异步添加GET /
路由,并且当您的测试运行时,它不在路由表中。为什么会发生这种情况?有些插件不会立即调用register回调,因为它们需要时间来设置自己。如果你在这个回调中注册你的路由,当你的测试运行时,它们不会被加载。例如,这将在您的测试中以404失败:
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
var fakePlugin = function (server, options, next) {
setTimeout(next, 500);
};
fakePlugin.attributes = { name: 'fake' };
server.register(fakePlugin, function (err) {
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
reply('ok');
}
});
});
exports.server = server;
解决方案:
要解决此问题,您只需要延迟测试,直到所有插件都完成加载。有几种方法可以做到这一点。这里有一个我喜欢的:
将延迟运行测试的before
添加到测试中,直到服务器发出pluginsLoaded
事件:
...
lab.before(function (done) {
server.on('pluginsLoaded', done);
});
...
你只需要确保你在index.js
:
server.register(..., function (err) {
server.route({
...
});
server.emit('pluginsLoaded');
});
相关文章:
- 角度$http返回状态 0
- 如何使用 iframe.src 下载文件时获取返回状态代码
- $q.all 返回状态而不是值 - 为什么
- Redux 的 .getState() 不应该返回状态对象的副本
- 正在进行中的 Ajax 请求突然开始返回状态 = 0
- 我可以只返回状态对象的一部分而不是整个状态对象的新副本吗
- phonegap+iOS,http请求在本地文件上总是返回状态0
- 发送Json对象时,XMLHttpRequest返回状态0
- 如何在Node.js中从函数返回状态码
- 我所有的跨域调用都返回状态0
- JSON PUT返回状态码400
- 尝试使用韦氏词典API返回的XML,但请求失败.返回状态为0.该怎么做
- XHR上传在firefox中返回状态0
- HTML4和HTML5 -如果没有导航,我怎么知道是否有一个“返回”状态
- XMLHttpRequest异步不工作,总是返回状态0
- Ionic如何以编程方式返回状态
- AngularJS post返回状态码304,而不是post到play后端
- IE11在iFrame的Ajax POST操作期间返回状态0 (XMLHttpRequest: Network Erro
- HTTPXmlRequest返回状态为0的空响应文本
- 将图像从移动web应用程序(PhoneGap&JavaScript)上载到SOAP web服务返回状态0