Unit testing Mocha/Chair-在多个文件中运行测试

Unit testing Mocha/Chair-在多个文件中运行测试,unit-testing,mocha.js,chai,Unit Testing,Mocha.js,Chai,我想在多个测试文件中运行一个公共测试,我做了一些研究,这是我发现的建议解决方案,可以在一个文件中包含测试: 目录结构: |--test |--common |--common.js |--common_functions.js |--helpers.js |--registration.js common.js var helpers = require("../../services/helpers"); var chai = require("chai"

我想在多个测试文件中运行一个公共测试,我做了一些研究,这是我发现的建议解决方案,可以在一个文件中包含测试:

目录结构:

|--test
   |--common
      |--common.js
   |--common_functions.js
   |--helpers.js
   |--registration.js
common.js

var helpers = require("../../services/helpers");
var chai = require("chai");
var expect = require("chai").expect;
chai.should();
chai.use(require("chai-things"));
var testData = require("../../config/testData");

  it('check if we are connected to local test db', function(done) {
      helpers.checkTestDB(function(err, result) {
          expect(err).to.equal(null);
          result.should.equal('This is the test DB');
          done();
      });
  });
exports.importTest = function(name, path) {
    describe(name, function () {
        require(path);
    });
}
...
var common_functions = require('./common_functions');
...
describe("Common Tests Import", function(){
  common_functions.importTest("checkDb",'./common/common');
});
通用函数.js

var helpers = require("../../services/helpers");
var chai = require("chai");
var expect = require("chai").expect;
chai.should();
chai.use(require("chai-things"));
var testData = require("../../config/testData");

  it('check if we are connected to local test db', function(done) {
      helpers.checkTestDB(function(err, result) {
          expect(err).to.equal(null);
          result.should.equal('This is the test DB');
          done();
      });
  });
exports.importTest = function(name, path) {
    describe(name, function () {
        require(path);
    });
}
...
var common_functions = require('./common_functions');
...
describe("Common Tests Import", function(){
  common_functions.importTest("checkDb",'./common/common');
});
helpers.js/registration.js

var helpers = require("../../services/helpers");
var chai = require("chai");
var expect = require("chai").expect;
chai.should();
chai.use(require("chai-things"));
var testData = require("../../config/testData");

  it('check if we are connected to local test db', function(done) {
      helpers.checkTestDB(function(err, result) {
          expect(err).to.equal(null);
          result.should.equal('This is the test DB');
          done();
      });
  });
exports.importTest = function(name, path) {
    describe(name, function () {
        require(path);
    });
}
...
var common_functions = require('./common_functions');
...
describe("Common Tests Import", function(){
  common_functions.importTest("checkDb",'./common/common');
});
问题是,测试只在两个文件中的一个上运行,如果我将它保留在两个文件中,它将在helpers上运行,如果我注释掉helpers,注册文件将运行,是否有办法在每个文件中运行它


原因是我将每个文件中的env变量设置为使用test db,但是有很多事情要做,如果它发生了变化,我希望它能在每个文件上分别运行。

你需要在
common.js中做一些类似于你在
common\u functions.js中所做的事情。
:导出一个调用
它的函数,而不是像你现在这样让它坐在顶层。因此,将
common.js
修改为如下内容:

var helpers = require("../../services/helpers");
var chai = require("chai");
var expect = require("chai").expect;
chai.should();
chai.use(require("chai-things"));
var testData = require("../../config/testData");

module.exports = function () {
  it('check if we are connected to local test db', function(done) {
      helpers.checkTestDB(function(err, result) {
          expect(err).to.equal(null);
          result.should.equal('This is the test DB');
          done();
      });
  });
};
exports.importTest = function(name, path) {
    describe(name, function () {
        // We call the function exported by the module.
        require(path)();
    });
}
然后在导入模块后调用此函数。因此,将
common_functions.js
更改为如下内容:

var helpers = require("../../services/helpers");
var chai = require("chai");
var expect = require("chai").expect;
chai.should();
chai.use(require("chai-things"));
var testData = require("../../config/testData");

module.exports = function () {
  it('check if we are connected to local test db', function(done) {
      helpers.checkTestDB(function(err, result) {
          expect(err).to.equal(null);
          result.should.equal('This is the test DB');
          done();
      });
  });
};
exports.importTest = function(name, path) {
    describe(name, function () {
        // We call the function exported by the module.
        require(path)();
    });
}
否则,问题在于,因为CommonJS模块是单例的,所以当节点读取文件并在内存中创建模块时,
it
调用
common.js
将执行一次,并且仅执行一次。后续的
require('./common/common')
调用将不会再次执行模块的代码