Node.js 无法使节点js测试失败
我的文件结构是这样的 主文件夹 -server.js -文件夹测试 --serverTest.jsNode.js 无法使节点js测试失败,node.js,mocha.js,Node.js,Mocha.js,我的文件结构是这样的 主文件夹 -server.js -文件夹测试 --serverTest.js var expect = require("chai").expect; var http = require('http') describe('/', function(){ var server; beforeEach(function () { server = require('../server'); }); afterEach(fu
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;
当我从命令行运行“摩卡测试”时,我得到
✓ 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)
我很困惑
Mocha测试需要使用
done()
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
功能,摩卡将在默认值2秒后暂停测试
这可能也会解决您的ECONNRESET
问题,因为您的服务器在测试/请求期间没有关闭
即使在测试同步代码时,始终使用done()
,也会有所帮助,这样以后就不会落入这个陷阱。假阳性会导致数小时的故障排除痛苦 Mocha测试需要使用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
功能,摩卡将在默认值2秒后暂停测试
这可能也会解决您的ECONNRESET
问题,因为您的服务器在测试/请求期间没有关闭
即使在测试同步代码时,始终使用done()
,也会有所帮助,这样以后就不会落入这个陷阱。假阳性会导致数小时的故障排除痛苦 谢谢马特的富有洞察力的评论。您已经正确地识别了问题,将done传递给最外层的函数并在http.get()函数中调用它会导致测试失败。祝你有美好的一天!谢谢马特的富有洞察力的评论。您已经正确地识别了问题,将done传递给最外层的函数并在http.get()函数中调用它会导致测试失败。祝你有美好的一天!