当测试函数不在测试文件中时,mochajs referenceerror

时间:2016-01-16 06:03:51

标签: javascript unit-testing mocha

我在设置中有一个mochajs测试文件和一个javascript代码文件,如下所示:

/js/module/codefile.js
/js/test/testfile.js

codefile.js包含一些javascript函数,例如:

function addNumbers(a, b){
    return a+b;
}

testfile.js调用代码文件中的函数来测试它们:

describe("Add numbers test", function() {
    it("checks valid result", function() {
        var a = 2;
        var b = 1;
        var result = addNumbers(a, b);
        expect(result).to.equal(3);
    });
});

从命令行我cd到js文件夹(测试和模块目录的父)然后我运行mocha并得到以下错误:ReferenceError:在Context< anonymous>中没有定义addNumbers (试验/ testfile.js)。

我实际上无法确定如何定义mocha如何知道此函数的来源? (注意我正在使用客户端JS,因此无法使用import,并且没有看到任何特定方式(在Mocha或Karma或JS中),其中函数的定义方式与在Python或Java中相同)。关于如何在mocha中运行简单单元测试的任何想法?

我最初尝试让mocha在WebStorm中运行但在类似错误后放弃了。

1 个答案:

答案 0 :(得分:3)

嗯,mocha命令是一个nodejs程序。这意味着您可以使用Nodejs的模块系统来加载您的功能。

UISlider

并在您的测试文件中有

function addNumbers(a, b){
    return a+b;
}

module.exports = addNumbers;

但是,您说您在前端使用代码。那么在这种情况下,您只需检查var addNumbers = require('../module/codefile.js'); describe("Add numbers test", function() { it("checks valid result", function() { var a = 2; var b = 1; var result = addNumbers(a, b); expect(result).toEqual(3); }); }); 对象是否存在。如果它存在,则意味着mocha需要您的文件进行单元测试。

module

如果你想摆脱这个讨厌的 function addNumbers(a, b){ return a+b; } if (module && module.exports) { module.exports = addNumbers; } ,你可以使用browserify捆绑你的模块。 Browserify可帮助您使用Nodejs的模块系统在前端进行编码。所以你的代码将保持不变。