我怎样才能让istanbul使用node,mocha,jasmine和require js

时间:2013-10-09 20:57:40

标签: node.js requirejs jasmine mocha istanbul

我有一个现有的测试套件,可以在node.js中运行,使用mocha,require和jasmine,测试通过psake powershell脚本运行。我正在尝试添加测试覆盖率,因此要运行单元测试而不是执行:

node unitTest.js

我在做

伊斯坦布尔封面unitTest.js

这似乎有用,但只给我关于unitTest.js本身的覆盖信息,但没有提供项目中使用的任何其他实际javascript文件。我猜这是因为require / mocha组合所以它不知道我正在使用的js文件。

我尝试手动检测所有文件,作为代码覆盖率之前的一步,并在复制/检测文件上运行相同的命令但得到相同的结果。有关这项工作的任何提示吗?

这是unitTest.js的最后一部分

    requirejs(['mocha'], function(Mocha) {
var mocha = new Mocha({reporter: (process.env['TEAMCITY_VERSION'] ? 'teamcity' : 'spec')});
// Hack to establish the global variables (sigh)
mocha.suite.emit('pre-require', global, __filename, mocha);

fswalk(__dirname, function(err, results) {
    if (err)
        console.warn(err);
    else {
        var testName = process.argv[2] || "";
        console.log("testName: " + testName);
        var inclusionSuffixes = [testName + '.test.js'];
        var exclusionSuffixes = ['.integration.test.js'];
        var tests = _.filter(results, function (result) {
            var test = function (suffix) { return result.indexOf(suffix) == result.length - suffix.length; };
            return _.any(inclusionSuffixes, test) && !_.any(exclusionSuffixes, test);
        });
        requirejs(tests, function () {
            mocha.run(function(failures) {
                process.exit(failures);
            });
        });
    }
});

});

2 个答案:

答案 0 :(得分:0)

@ user2576666回答了评论中的问题:

“使用参数--hook-run-in-context使其正常工作”

答案 1 :(得分:-1)

尝试哄骗这些不同部分自己合作的另一种方法是使用Intern

这对于使用AMD(require.js)的项目尤为重要。它在引擎盖下使用伊斯坦布尔,并有一个自动检测代码的代理服务器。对于你想要做的事情,这是一个非常光滑的设置。