在mocha集成测试中使用通配符路径覆盖测试文件中的测试文件

时间:2017-10-31 23:00:35

标签: javascript mocha

top.js

const opts       = require('minimist')(process.argv);
const failAfter  = Number(opts['fail-after'] );

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


describe('top', function() {
var fileMatches = null;
let failures = 0;

afterEach(function() {

    console.log(this.currentTest.state);
    if(this.currentTest.state == 'failed') {
        console.log("fail-after = " +failAfter);
        failures++;
        console.log("failures = " +failures);
        if(failures == failAfter){
            console.log('\nToo many failures, exiting...');
            process.exit(1);
        }
    }
});

importTest("a",'./test/a/a.js');
importTest("b",'./test/b/b.js');
importTest("test",'./test/test.js');
importTest("test1",'./test/test1.js');

});

我正在尝试将所有我的mocha集成测试包装在我的“顶部”中的不同文件中。描述(如上所述)。这样做的目的是在特定数量的测试用例失败后停止测试(由用户在' fail-after'中指定)。

要包含我必须显式调用importTest()并传递每个测试文件的路径的所有测试。我想自动化它,所以我不必给出每个文件的路径,而是覆盖目录和子目录中的所有文件。

有人可以提出一种方法吗?

我使用命令" mocha --fail-after = 5 ./top.js"

运行我的测试

1 个答案:

答案 0 :(得分:0)

使用Glob npm模块解决了上述问题。

解决方案:

top.js

const opts       = require('minimist')(process.argv);
const failAfter  = Number(opts['fail-after'] );

var Glob = require("glob");
var pattern = "*.js";
var options = {matchBase: true, nonull: true};

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


describe('top', function () {
    let failures = 0;

    afterEach(function () {

        console.log(this.currentTest.state);
        if (this.currentTest.state == 'failed') {
            failures++;
            console.log("failures = " + failures);
            if (failures == failAfter) {
                console.log('\nToo many failures, exiting...');
                process.exit(1);
            }
        }
    });

    function globArray(pattern, options) {
        var list = [];

        var pathList = Glob.sync(pattern, options);

        pathList.forEach(function (item) {
            list.push("./"+item);
        });
        return list;
    }


    var mg = globArray(pattern, options);

    for(var i=0; i<mg.length; i++) {
        importTest("sample", mg[i]);
    }

});