加入从多个文件测试与mocha.js加入从多个文件测试与mocha.js(joining tests

2019-05-13 03:43发布

我想加盟,从多个文件中的所有测试,在一个文件中,这样的事情:

  describe('Controllers', function() {
    describe('messages.js', function() {
      require('./controllertests/messages').test(options);
    })
    describe('users.js', function() {
      require('./controllertests/users').test(options);
    })
  })

我敢肯定,这是不参加,我有一些做太困难找到如何做到这一点的例子测试的最佳方法:■

Answer 1:

如果你想包含多个模块你的describe的层次结构就像你在你的问题做什么,你在做什么是相当多的除非你想要写摩卡自定义测试装载机。 编写自定义的加载不会是更容易或使你的代码比你已经​​有了更清晰。

下面是我将如何改变一些东西的例子。 该test在这个例子子目录的组织结构:

.
└── test
    ├── a
    │   └── a.js
    ├── b
    │   └── b.js
    ├── common.js
    └── top.js

top.js

function importTest(name, path) {
    describe(name, function () {
        require(path);
    });
}

var common = require("./common");

describe("top", function () {
    beforeEach(function () {
       console.log("running something before each test");
    });
    importTest("a", './a/a');
    importTest("b", './b/b');
    after(function () {
        console.log("after all tests");
    });
});

importTest功能只是为了显示它如何能够处理导入多个模块的重复而不必重新输入整个describe(... require...的东西,每一次该common模块是为了保持你需要什么在测试套件的多个模块使用。我没有真正使用它的top ,但它可以在那里使用,如果需要的话。

我将在这里指出, beforeEach将分别与登记的每一个测试之前运行其代码, it是否出现内describetop或出现在任何导入模块 。 随着--recursivebeforeEach代码必须被复制到每个模块或者是你有一个beforeEach调用从一个共同的模块导入的功能,每个模块中的钩。

此外, after钩将在套件中的所有测试之后运行。 这不能被复制--recursive 。 如果您使用--recursive和的代码添加after到每个模块,将每一次执行模块,而不仅仅是一次针对整个测试。

具有单下的所有测试显示top标题不能使用复制--recursive 。 随着--recursive每个文件可能describe("top" ,但是这将创建一个新的top为每个文件标题。

common.js

var chai = require("chai");

var options = {
    foo: "foo"
};

exports.options = options;
exports.chai = chai;
exports.assert = chai.assert;

使用一个名为模块 common这样的东西,我在我的一些测试套件来完成,以避免对require一堆东西一遍又一遍,并持有全球只读变量或函数不保持状态。 我宁愿不污染global对象像thgaskell的答案,因为这个对象是真正的全球性和可访问,即使在第三方库的代码可以被加载。 这不是我找到可以接受的,我的代码。

a/a.js

var common = require("../common");
var options = common.options;
var assert = common.assert;

it("blah a", function () {
    console.log(options.foo);
    assert.isTrue(false);
});

b/b.js

it("blah b", function () {});


Answer 2:

虽然这可能不是直接链接到这个问题,我一直在寻找的答案是:

$ mocha --recursive

将执行在“测试”文件夹中的子目录的所有测试。 整齐。 省去了维护的,我想加载和实际上只是始终运行一切测试列表。



Answer 3:

没有什么阻止你运行多个测试文件。 一般情况下,每个测试不应该依赖于另一个测试的结果,所以共享变量是不是你想要做的事。

这里是你如何可以组织你的测试文件的例子。

.
├── app.js
└── test
    ├── common.js
    ├── mocha.opts
    │
    ├── controllers
    │   ├── messages-controller.js
    │   └── users-controller.js
    │
    └── modles
        ├── messages-model.js
        └── users-model.js

那么你的内部mocha.opts文件时,请务必将--recursive选项。

mocha.opts

--ui bdd
--recursive

如果 ,你要在所有文件,包括通用模块,您可以添加到common.js文件。 在根目录的文件test目录,将在嵌套目录中的文件之前运行。

common.js

global.chai = require('chai');
global.assert = chai.assert;
global.expect = chai.expect;
chai.should();
chai.config.includeStack = true;

process.env.NODE_ENV = 'test';

// Include common modules from your application that will be used among multiple test suites.
global.myModule = require('../app/myModule');


Answer 4:

我知道这是一个老的文章,但我想用什么已经很好地解决了我,非常类似于OP提出的方法插入内容。

我工作的项目已经进行了测试和试验持续增长。 我结束了使用require ,因为它是同步的,因此使得它更容易一点来编写测试,而在架构太多的改变:

// inside test/index.js

describe('V1 ROUTES', () => {
  require('./controllers/claims.test');
  require('./controllers/claimDocuments.test');
  require('./controllers/claimPhotos.test');
  require('./controllers/inspections.test');
  require('./controllers/inspectionPhotos.test');
  require('./controllers/versions.test');
  require('./services/login.v1.test');
});

describe('V2 ROUTES', () => {
  require('./services/login.v2.test');
  require('./services/dec-image.v2.test');
});

describe('V3 ROUTES', () => {
  require('./services/login.v3.test');
  require('./services/getInspectionPhotosv3.test');
  require('./services/getPolicyInfo.v3.test');
});

describe('ACTIONS', () => {
  require('./actions/notifications.test');
});


Answer 5:

describe( 'Running automation test, Please wait for all test to complete!'.red, function () {


    var run = require( './Test.js' );

    for ( var i = 0; i < 2; i++ ) {
        run.badLogin();
        run.loginLimited();
        run.acceptJob();
        run.drivingToJob();
        run.arrivedAtJob();
        run.towingJob();
        run.arrivedDestination();
        run.jobComplete();
        run.restrictionLicensePlate();
        run.newNodeMainMenu();
        run.newNodeMainMenuToDrafts();
        run.draftDelete();
        run.resetAllData();
        run.companyVehicle();
        run.actionsScreenClockInOut();
        run.mainMenuLogout();
        run.loginAdmin();
        run.actionsScreenLogout();
    }
} );


文章来源: joining tests from multiple files with mocha.js