Node.js 无法使节点js测试失败

Node.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

我的文件结构是这样的

主文件夹

-server.js

-文件夹测试

--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;
当我从命令行运行“摩卡测试”时,我得到

 ✓ 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)
我很困惑

  • 第一次测试应该失败,因为它与“这不是一个偶数”相比

  • 我不确定发生了什么未捕获错误:connect EconReset


  • 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()函数中调用它会导致测试失败。祝你有美好的一天!