【发布时间】:2012-08-19 23:04:42
【问题描述】:
Node.js 的新手
制作了一个运行服务器进程并提供文件的应用程序(不使用 express 或任何框架),现在我正在尝试对其进行单元测试。
我正在尝试为此使用 mocha 测试...我打算启动我的服务器进程,然后针对它运行请求以测试预期结果(统计代码、正文内容等)
但是它不能正常工作,所有请求都无法连接到服务器......我很确定问题是因为节点正在运行一个进程循环,而服务器没有在“后台”运行在发出请求时,查询正在运行,或者服务器可能尚未运行(已启动 ASYNC)?
无论如何,我想知道测试这个的正确方法是什么,我假设我需要让服务器在后台运行(如分叉进程)和/或者我需要找到一种方法来等待服务器进程首先“启动”,但不确定如何。
或至少建议测试此类服务器进程(使用 Mocha 或其他)。
谢谢。
这是示例测试代码(自原始问题以来已更新)
var server = new Server302('./fixture/');
var instance;
describe('Tests', function() {
before(function(done) {
instance = http.createServer(function(request, response) {
console.log(request.url);
server.serve(request, response);
}).listen(8000);
instance.on("listening", function() {
console.log("started");
done();
});
});
after(function(done){
instance.close();
console.log("stopped");
done();
});
it("Should fetch test.html", function(done) {
console.log("test1");
http.get("http://localhost:8000/", function(res) {
res.on('data', function(body) {
console.log(body)
expect(body).toEqual("test");
done();
});
})
});
它似乎按顺序执行,但仍然因连接错误而失败,而在使用浏览器手动测试时它可以工作:
started
test1
․․․stopped
✖ 1 of 1 tests failed:
1) Tests Should fetch test.html:
Error: connect ECONNREFUSED
at errnoException (net.js:670:11)
at Object.afterConnect [as oncomplete] (net.js:661:19)
【问题讨论】:
-
测试结果仅供参考:开始 test1 ․․․stopped ✖ 3 个测试中的 3 个失败:1) 测试应获取 test.html:错误:在 errnoException (net.js:670:11) 处连接 ECONNREFUSED在 Object.afterConnect [as oncomplete] (net.js:661:19) 2) 测试应该获取 test.txt:错误:在 Object.afterConnect [as oncomplete] 处的 errnoException (net.js:670:11) 处连接 ECONNREFUSED ( net.js:661:19) 3) 测试应该得到 404:错误:在 Object.afterConnect 的 errnoException (net.js:670:11) 处连接 ECONNREFUSED [as oncomplete] (net.js:661:19)
标签: node.js automated-tests mocha.js