无法使节点 js 测试失败
Cannot get node js test to fail
我的文件结构是这样的
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;
当我从命令行 运行 "mocha test" 得到
✓ 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)
我很困惑
第一个测试应该失败,因为它与 "This isnt even a number".
相比
我不确定未捕获错误发生了什么:连接 ECONNRESET
如果您是 testing asynchronous code,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
函数,mocha会在默认2秒后超时测试。
这也可能会解决您的 ECONNRESET
问题,因为您的服务器不会在 test/request 中途关闭。
即使在测试同步代码时,始终使用 done()
也会有所帮助,这样您以后就不会落入这个陷阱。误报可能会导致数小时的故障排除痛苦。
我的文件结构是这样的
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;
当我从命令行 运行 "mocha test" 得到
✓ 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)
我很困惑
第一个测试应该失败,因为它与 "This isnt even a number".
相比
我不确定未捕获错误发生了什么:连接 ECONNRESET
如果您是 testing asynchronous code,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
函数,mocha会在默认2秒后超时测试。
这也可能会解决您的 ECONNRESET
问题,因为您的服务器不会在 test/request 中途关闭。
即使在测试同步代码时,始终使用 done()
也会有所帮助,这样您以后就不会落入这个陷阱。误报可能会导致数小时的故障排除痛苦。