【发布时间】:2013-09-04 22:56:26
【问题描述】:
我正在尝试使用 Mocha 为我正在开发的 Node.js API 编写测试。我正在编写的当前测试只对查看响应是否返回正确的状态代码感兴趣 - 他们不关心响应正文。
因此,我编写了以下测试:
注意,这不是真正的测试。我已经删掉了项目特定的东西。错误确实仍然出现在下面的代码中。
var http = require('http');
var assert = require("assert");
before(function() {
var server = http.createServer(function(req, res) {
res.end();
}).listen(8080);
});
describe("Convenience Functions", function() {
it("should return a 200 status code", function(done) {
http.get("http://localhost:8080", function(res) {
assert.equal(res.statusCode, 200);
res.on('end', function() {
done();
});
});
});
});
但是,运行该测试让我从 Mocha 超时。 Mocha 默认设置为 2000 毫秒超时,但我可以将其更改为任何不必要的高数值,它仍然会超时。
我已经为此奋斗了几个小时,终于找到了一个“解决办法”。如果我将测试更改为:
describe("Convenience Functions", function() {
it("should return a 200 status code", function(done) {
http.get("http://localhost:8080", function(res) {
assert.equal(res.statusCode, 200);
res.on('data', function() { })
res.on('end', function() {
done();
});
});
});
});
测试不再超时。您会注意到这两个测试之间的唯一 区别在于第二个版本处理响应中的data 事件。它不对数据做任何事情,它只是在其上定义了一个监听器。现在我的测试顺利通过了。
这是一个很容易解决的问题,但我很困惑为什么我需要这样做。我打电话给done(),摩卡测试不应该就结束吗?
【问题讨论】:
标签: javascript node.js api unit-testing mocha.js