我的文件结构是这样的
folder_main
-server.js
-folder_tests
- serverTest.js
var expect = require("chai").expect;
var http = require('http')
describe('/', function(){
var server;
beforeEach(function () {
server = require('../server');
});
afterEach(function () {
server.close();
});
it('should return 200 status code', function(){
http.get("http://localhost:8080", function(res) {
console.log("Got response: " + res.statusCode);
expect(res.statusCode).to.equal("This isnt even a number")
})
})
})
和server.js是
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var port = 8080;
server.listen(port);
console.log("listening on port " + port)
// router
app.get('/', function (req, res){
res.writeHead(200, {"Content-Type": "text/plain"});
res.end("Hello World\n");
});
module.exports = server;
当我跑步"摩卡测试"从我得到的cmd行
✓ should return 200 status code
1) "after each" hook
1 passing (277ms) 1 failing
1) / "after each" hook:
Uncaught Error: connect ECONNRESET
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
我很困惑
第一次测试应该失败,因为它与&#34相比;这甚至不是数字"。
我不确定Uncaught Error会发生什么:连接ECONNRESET
答案 0 :(得分:3)
done()
回调,否则mocha将在断言运行之前完成,并且不会检测到任何失败。
it('should return 200 status code', function(done){
http.get("http://localhost:8080", function(res) {
console.log("Got response: " + res.statusCode);
expect(res.statusCode).to.equal("This isnt even a number")
done()
})
})
done
被设置为测试函数的第一个参数,然后在断言后调用它。如果未调用done
函数,则mocha将在默认值2秒后超时测试。
这可能会解决您的ECONNRESET
问题,因为您的服务器在测试/请求过程中没有被关闭。
即使在测试同步代码时也总是可以使用done()
,因此您将来不会陷入此陷阱。误报可能导致数小时的疼痛。