node.js - 在 npm 下观看 Mocha 失败

标签 node.js npm mocha.js koa supertest

我有一个非常简单的 Koa 应用程序:

var app = module.exports = require("koa")();

app.use(function *(){
    this.body = "Koa says Hi!";
});

var port = process.env.PORT || (process.argv[2] || 3000);
port = (typeof port === "number") ? port : 3000;

app.listen(port);
console.log("Application started. Listening on port:" + port);

我像这样用 mocha 和 supertest 进行测试;

var app = require("../");
var request = require("supertest").agent(app.listen());

describe("Our amazing site", function () {

    it("has a nice welcoming message", function (done) {
        request
            .get("/")
            .expect("Koa says Hi!")
            .end(done);
    });
});

我想查看我的文件是否有更改,并像这样使用 -w 标志

mocha -u bdd -R min -w

效果很好。我更改了一个文件,重新执行了测试,一切都很好。

但是,非常奇怪的是,如果我将该命令作为脚本移动到我的 package.json 文件中,如下所示:

"scripts": {
    "watch:test": "mocha -u bdd -R min -w"
},

我第一次运行它的命令时,当我做出一个被拾取但现在测试失败的更改时:

1)  Uncaught error outside test suite:
     Uncaught Error: listen EADDRINUSE :::3000
      at Object.exports._errnoException (util.js:837:11)
      at exports._exceptionWithHostPort (util.js:860:20)
      at Server._listen2 (net.js:1231:14)
      at listen (net.js:1267:10)
      at Server.listen (net.js:1363:5)
      at Application.app.listen (node_modules/koa/lib/application.js:70:24)
      at Object.<anonymous> (index.js:10:5)
      at Object.<anonymous> (test/site.spec.js:1:73)
      at Array.forEach (native)
      at StatWatcher._handle.onchange (fs.js:1285:10)

在我停止 mocha 然后重新启动它之前,该错误不会消失。

为什么它在通过 npm 运行时表现不同? 我能做些什么来解决这个问题?

最佳答案

好的 - 我找到了解决方案。这与我在测试时启动应用程序两次有关。并且不关闭两者。

要开始使用 Supertest 进行测试,您需要构造如下请求:var request = require("supertest").agent(app.listen());。顺便说一句,app.listen() 与我们在应用程序中所做的相同。

由于我们正在监视我们的文件以进行更改,因此服务器永远不会关闭。在下一次运行测试时,它会再次开始:var request = require("supertest").agent(app.listen()); 和“地址正在使用中”。

解决方案很简单:在您未在测试中运行时开始监听。一种简单的方法是检查应用程序中的模块父级:

if(!module.parent) {
   app.listen();
}

关于node.js - 在 npm 下观看 Mocha 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32868692/

相关文章:

javascript - 让 socket.io 在 Windows 7 x64 位平台上工作

javascript - 运行 "npm test"时没有 console.log 到 STDOUT(开 Jest )

unit-testing - 使用 WebStorms IDE 是否可以仅运行单元测试套件中的一个单元测试?

javascript - Dialogflow + 外部 API + Google Cloud Functions *不含* Firebase : how to return fulfillment response?

node.js - Mongodb 以二进制形式存储 JSON 文件

JavaScript promise 转换

node.js - 如果我没有使用 GitHub,npm 如何提交 package-lock.json

NPM 7 工作区 - 多个节点模块?

javascript - mocha 错误 : No test files found: "test/" npm ERR! 测试失败

mocha.js - Mocha Chai - 测试对象的多个属性