测试功能不在测试文件中时出现mochajs referenceerror

mochajs referenceerror when testing function not in test file

我有一个 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: addNumbers is not defined at Context (test/testfile.js)。

我真的看不出它是如何定义的,因为 mocha 怎么知道这个函数是从哪里来的? (注意我正在使用客户端 JS,所以不能使用导入,并且没有看到任何具体的方法(通常在 Mocha 或 Karma 或 JS 中),其中函数定义为 Python 或 Java).关于如何在 mocha 中获得简单单元测试的任何想法 运行ning?

我最初尝试在 WebStorm 中将 mocha 设置为 运行,但在出现类似错误后放弃了。

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

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);
    });
});

但是,您说您正在 front-end 上使用您的代码。那么在这种情况下,您只需检查 module 对象是否存在。如果存在,则表示 mocha 需要您的文件进行单元测试。

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

    if (module && module.exports) {
       module.exports = addNumbers;
    }

如果你想摆脱这个讨厌的 if,你可以使用 browserify 捆绑你的模块。 Browserify 帮助您使用 Nodejs 的模块系统在 front-end 上编码。所以您的代码将保持不变。