【问题标题】:mochajs referenceerror when testing function not in test file测试功能不在测试文件中时的mochajs参考错误
【发布时间】:2016-01-16 06:03:50
【问题描述】:

我在设置中有一个 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 中运行简单的单元测试有什么想法吗?

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

【问题讨论】:

  • 您是否从命令行运行 mocha 来测试您的代码?
  • @Andrei Cacio 是的,我 cd 到测试目录的父目录并运行 'mocha' mocha 拿起测试文件 OK

标签: javascript unit-testing mocha.js


【解决方案1】:

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

但是,您说您在前端使用您的代码。那么在这种情况下,您只需检查module 对象是否存在。如果存在,则意味着 mocha 需要您的文件进行单元测试。

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

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

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

【讨论】:

  • 一旦我通过 npm 添加 chai 以便期望被识别并将错字 'toEqual' 更改为 'to.equal'(已在上面修复),它就可以工作了
猜你喜欢
  • 2023-03-20
  • 2021-09-22
  • 2013-03-05
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
相关资源
最近更新 更多