Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 摩卡咖啡测试永远运行_Node.js_Mocha.js_Supertest - Fatal编程技术网

Node.js 摩卡咖啡测试永远运行

Node.js 摩卡咖啡测试永远运行,node.js,mocha.js,supertest,Node.js,Mocha.js,Supertest,大家好,谢谢大家的关注 我正在尝试用mocha和supertest运行测试,而且,即使一切正常,测试也会永远运行。为了避免这种情况,我在after()方法中添加了一个“process.exit(0)”,这样它就可以正确构建,但这对于“隔离”来说似乎是错误的(此外,它看起来很糟糕:-) My package.json: { "name": "application-name", "version": "0.0.1", "private": true, "scripts": {

大家好,谢谢大家的关注

我正在尝试用mocha和supertest运行测试,而且,即使一切正常,测试也会永远运行。为了避免这种情况,我在after()方法中添加了一个“process.exit(0)”,这样它就可以正确构建,但这对于“隔离”来说似乎是错误的(此外,它看起来很糟糕:-)

My package.json:

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "nodejs ./bin/www",
    "test": "mocha"
  },
  "dependencies": {
    "body-parser": "~1.0.0",
    "cookie-parser": "~1.0.1",
    "debug": "~0.7.4",
    "ejs": "~0.8.5",
    "express": "~4.0.0",
    "is-my-json-valid": "^2.16.1",
    "knex": "^0.13.0",
    "morgan": "~1.0.0",
    "mysql": "^2.14.1",
    "static-favicon": "~1.0.0"
  },
  "devDependencies": {
    "mocha": "^4.0.0",
    "supertest": "^3.0.0",
    "chai": "^4.1.2",
    "util": "^0.10.3"
  }
}
我的测试:

var request = require('supertest');
var util    = require('util');

describe('Endpoints', function () {
  var server;

  beforeEach(function() {
    server = require('../app').listen(3000);
  });

  afterEach(function(done) {
    server.close(done);
  });

  after(function(done){
    process.exit(0); // <-- THIS LOOKS REALLY BAD
  });

  it('Success ', function(done) {
    var deputy = {name:"Meu Nome", uf:"SP", site_id:"1", secondary_site_id:"2"}
    request(server)
      .post('/api/deputy')
      .send(deputy)
      .expect(200, done);
  });

  it('Bad request ', function(done) {
    var deputy = {naonome:"Nao deve funcionar"}
    request(server)
      .post('/api/deputy')
      .send(deputy)
      .expect(400, done);
  });

});

听起来数据库连接仍在运行。你可以把它关上

connection.end(function(err) {
  // The connection is terminated now
});
我假设您可以从/server/db文件获得连接。如果您还没有这样做,请将其导出

我自己不使用mysql,但使用MongoDB时我的after函数是这样的:

after(function (done) {
    server.close(function () {
      mongoose.connection.close(done)
    })
})
如果我不关闭数据库连接,测试将一直运行到最后,但永远不会完成并退出shell。

传递到mocha进程

mocha --exit
在版本4.0.0中,Mocha将默认行为从测试完成后退出更改为不退出。从那时起,如果您希望mocha在测试运行后停止,则必须添加
--exit
标志


请注意,如果没有退出标志,某些连续集成系统可能永远运行;如果您为CI分钟付费,这可能不可取。

显示
app.js
module.done的代码,并在问题中添加您是对的。我使用的不是mongoose而是knex,所以在“之后”位中,是knex.destroy(),而不是mongoose.connection.close()。感谢您的回答!我建议您给出一个简单的解释,说明为什么这样做可以解决问题,以及OP的代码有哪些地方出错。一两句话通常就足够了。
mocha --exit