【问题标题】:Chai exports are not found in Mocha test在 Mocha 测试中找不到 Chai 导出
【发布时间】:2013-04-25 23:04:07
【问题描述】:

我创建了简单的 Mocha 测试。当使用 Node “assert” 模块时,它可以完美运行。我从命令行运行它(Mocha 作为全局节点模块安装):

$ mocha myTest.js

․

1 test complete (6 ms)

脚本如下所示:

var assert = require("assert")
describe('Array', function(){
    describe('#indexOf()', function(){
        it('should return -1 when the value is not present', function(){
            assert.equal(-1, [1,2,3].indexOf(5));
            assert.equal(-1, [1,2,3].indexOf(0));
        })
    })
})

好吧,我尝试添加 Chai 而不是断言库。我先安装的:

npm install chai

所以,我的项目中已经创建了 node_modules 目录。到目前为止很棒。然后,我修改了脚本以使用 Chai:

var chai = require("chai");

describe('Array', function(){
    describe('#indexOf()', function(){
        it('should return -1 when the value is not present', function(){
            [1,2,3].indexOf(5).should.equal(-1);
            expect([1,2,3].indexOf(5)).to.equal(-1);
            assert.equal([1,2,3].indexOf(5),-1);
        })
    })
});

它不起作用,Mocha 测试失败并出现 TypeError:

TypeError: Cannot call method 'equal' of undefined

我假设 Chai 没有定义应该所以它是未定义的。

这怎么可能?

如何使用 Chai 进行测试?我试图在全球范围内安装 Chai,但没有任何效果。我还用-r chai 运行了脚本,也没有任何效果。

显然,Chai 模块已加载,但未定义变量(Object.prototype 属性)。我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js mocha.js node-modules chai


    【解决方案1】:
    var expect = require('chai').expect;
    

    这将使您的expect 电话正常工作。但是,您还有一个完全来自不同库的 should 调用,因此请更改

    [1,2,3].indexOf(5).should.equal(-1);
    

    expect([1,2,3].indexOf(5)).to.equal(-1);
    

    【讨论】:

    • 是的。这是 CommonJS 社区做出的设计决定。显式声明的依赖关系,即使是冗长的,也比隐式依赖关系更可取。
    • 在我的情况下,我只是收到一条消息说'require'未定义。我在 gulp 中通过 karma 运行 mocha
    • 这个问题是关于node.js的。如果您在浏览器中运行,如果您想使用 commonjs require,则需要一个模块捆绑器,例如 browserify 或 webpack。否则,只需按照 chai 的说明将其加载到浏览器全局命名空间中,直接使用即可,无需要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2017-10-21
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多