在 npm 下观看 mocha 失败
mocha watching fails under npm
我有一个非常简单的 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());
和 "Address is in use"。
解决方法很简单:当你不运行正在接受测试时就开始收听。一种简单的方法是检查应用程序中的父模块:
if(!module.parent) {
app.listen();
}
我有一个非常简单的 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());
和 "Address is in use"。
解决方法很简单:当你不运行正在接受测试时就开始收听。一种简单的方法是检查应用程序中的父模块:
if(!module.parent) {
app.listen();
}