【问题标题】:Chai.should() makes Mocha explodeChai.should() 让 Mocha 爆炸
【发布时间】:2016-02-02 13:24:31
【问题描述】:

我尝试使用 Chai Should 风格的断言,但是下面的语句让 Mocha 爆炸了。这是我完整的 Require 块:

/**                                         
 * Module dependencies.                     
 */                                         
var mongoose = require('mongoose'),         
  User = mongoose.model('User'),            
  moment = require('moment'),               
  SSEvent = mongoose.model('Event'),        
  chai = require('chai');                   

chai.use(require('chai-datetime'));         
var should = chai.should();                   

错误信息:

Running "mochaTest:src" (mochaTest) task
>> Mocha exploded!
>> TypeError: chai.should is not a function
>>     at Object.<anonymous> (/Users/sebastianweikart/Desktop/dev/conftool-nga-mean/modules/events/tests/server/events.server.model.tests.js:13:19)
>>     at Module._compile (module.js:413:34)
>>     at Object.Module._extensions..js (module.js:422:10)
>>     at Module.load (module.js:357:32)
>>     at Function.Module._load (module.js:314:12)
>>     at Module.require (module.js:367:17)
>>     at require (internal/module.js:16:19)
>>     at /Users/sebastianweikart/Desktop/dev/conftool-nga-mean/node_modules/mocha/lib/mocha.js:219:27

可能是什么问题? 我用 "chai": "^3.5.0" 和 "mocha": "~2.4.5" 应该是最新的稳定版本..

更新:

我现在添加了以下简单的剥离测试 - 它仍然爆炸:

'use strict';

/**
 * Module dependencies.
 */
var chai = require('chai');
var should = chai.should();



/**
 * Unit tests
 */
describe('Chai Should Test', function () {

  describe('Chai Should() should work', function () {
    it('Chai Should() must work', function (done) {
      var spartacus = 'spartacus';
      should.exist(spartacus);
      done();
    });

  });
});



Running "mochaTest:src" (mochaTest) task
>> Mocha exploded!
>> TypeError: chai.should is not a function
>>     at Object.<anonymous> (/Users/sebastianweikart/Desktop/dev/conftool-nga-mean/modules/events/tests/server/chai.should.test.js:7:19)

【问题讨论】:

  • 您的问题中缺少某些内容。我能够运行您的示例测试而不会出现任何错误。

标签: node.js mocha.js bdd chai


【解决方案1】:

确保在项目中卸载了 should.js。 should.js 和 chai.should 一起使用会发生冲突

【讨论】:

    【解决方案2】:

    确保您不需要should 包 -> https://www.npmjs.com/package/should。

    【讨论】:

      【解决方案3】:

      如果您正确地导入了chai,那似乎没有问题。

      chai 文档状态:

      通过应该要求,该函数被 [...] 执行。

      因此,如果您有一个有效的chai 对象,它将附加一个shoudld() 函数。您可以通过testing it live on tonic dev 验证这一点。

      您还应该尝试删除 chai.use(require('chai-datetime')); 语句 - 这可能会覆盖 chais 原始属性并删除 should() 函数。

      如果您仍然遇到问题,则可能是由其他原因引起的 - 在这种情况下,我们需要查看/了解更多关于您的项目的信息。

      【讨论】:

      • 如果我删除 var should = chai.should();有用。我在文件的最后一行使用 should 断言 - 例如 savedEvent.title.should.equal('MyEvent');这也没有问题: var assert = chai.assert;
      • 谢谢,我删除了 chai-datetime- 它还在爆炸:(
      • 删除 所有内容,除了 chai 导入和 chai.should()。会发生什么?
      • 只要我不使用像 should.not.exist(err); 这样的语句,它就会通过。或者应该.exist(err); - 它们是我想要包含 should() 函数的原因。显然我可以使用不同的语法作为解决方法,但我想深入了解..
      • 如果您需要帮助,请提供一个实际示例,如果您正在尝试的代码,包括要求语句和尝试使用@987654327 @ 等,而 没有 其他任何东西。
      【解决方案4】:

      我遇到了同样的问题。

      但是我刚刚导入的应该是const should = chai.should;而不是const should = chai.should();

      【讨论】:

        【解决方案5】:

        我用过

        chai.Should()

        而不是

        chai.should()

        作为临时修复,因为我正在处理的项目目前需要一个需要 should 包的包,这会干扰 chai。 Chai 使用 .should 和 .Should 导出,它们引用相同的函数 loadShould(),这就是我们正在调用的函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 2011-10-05
          • 1970-01-01
          • 2022-01-18
          • 2013-02-13
          • 1970-01-01
          相关资源
          最近更新 更多