为啥我的 mocha/chai Error throwing 测试失败了?

Posted

技术标签:

【中文标题】为啥我的 mocha/chai Error throwing 测试失败了?【英文标题】:Why is my mocha/chai Error throwing test failing?为什么我的 mocha/chai Error throwing 测试失败了? 【发布时间】:2014-11-22 05:19:11 【问题描述】:

我正在尝试测试一个简单的 javascript 包。我想检查是否引发了错误,但是当我的测试运行并引发错误时,测试被标记为失败。

代码如下:

var should = require('chai').should(),
    expect = require('chai').expect();

describe('#myTestSuite', function () 

    it ('should check for TypeErrors', function () 

        // Pulled straight from the 'throw' section of
        // http://chaijs.com/api/bdd/
        var err = new ReferenceError('This is a bad function.');
        var fn = function ()  throw err; 
        expect(fn).to.throw(ReferenceError);

    )

)

其中,运行时给我以下输出:

kh:testthing khrob$ npm test

> testthing@0.1.0 test /Users/khrob/testthing
> mocha



  #myTestSuite
    1) should check for TypeErrors


  0 passing (5ms)   1 failing

  1) #myTestSuite should check for TypeErrors:
     TypeError: object is not a function
      at Context.<anonymous> (/Users/khrob/testthing/test/index.js:10:3)
      at callFn (/Users/khrob/testthing/node_modules/mocha/lib/runnable.js:249:21)
      at Test.Runnable.run (/Users/khrob/testthing/node_modules/mocha/lib/runnable.js:242:7)
      at Runner.runTest (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:373:10)
      at /Users/khrob/testthing/node_modules/mocha/lib/runner.js:451:12
      at next (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:298:14)
      at /Users/khrob/testthing/node_modules/mocha/lib/runner.js:308:7
      at next (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:246:23)
      at Object._onImmediate (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:275:5)
      at processImmediate [as _immediateCallback] (timers.js:336:15)



npm ERR! Test failed.  See above for more details. 
npm ERR! not ok code 0

我知道这里有很多关于你传递给 expect() 的答案是一个函数而不是函数的结果,我已经尝试了我能想到的所有匿名函数化排列,但我总是失败测试结果。

我认为这一定与我的配置有关,因为我基本上只是在运行文档中的示例,或者我对测试通过或失败的期望没有正确校准。

有什么线索吗?

【问题讨论】:

如果您查看调用堆栈,您的测试似乎因为第 10 行的错误而失败:var err = new ReferenceError('This is a bad function.'); 似乎您的运行时环境无法识别 ReferenceError。您使用什么浏览器/环境来运行此测试? @AtesGoral:他在什么环境下运行并不重要。你已经发现了错误:ReferenceError 未定义。让它成为一个答案。由 OP 来弄清楚为什么它没有被定义。 应该是vanilla节点环境,但我会深入研究缺少ReferenceError。感谢您的洞察力 对于面包屑路径,第 11 行上的 console.log(err, typeof err, ReferenceError); 结果为:[ReferenceError: This is a bad function.] 'object' [Function: ReferenceError]。调查仍在继续…… 环境可能不允许您以编程方式实例化 ReferenceError,因为它是一种内在异常类型。 【参考方案1】:

这应该可以解决您的问题:

var expect = require('chai').expect;

注意expect 函数没有被调用。

【讨论】:

【参考方案2】:

找到了!

在顶部

expect = require('chai').expect(),

没有给我任何有用的东西。将其更改为:

chai = require('chai'),

然后将测试称为

chai.expect(fn).to.throw(ReferenceError);

完全符合我的预期。

感谢您的帮助。

【讨论】:

接受的答案显然解决了您的问题:expect = require('chai').expect 之后的大括号是问题所在。

以上是关于为啥我的 mocha/chai Error throwing 测试失败了?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mocha/Chai 测试复杂的 React 组件

Mocha - Chai Unit Terst 报告生成 - NodeJS

markdown 节点单元测试备忘单:Mocha,Chai和Sinon

markdown Mocha,Chai和Sinon的终极单元测试作弊表

markdown Mocha,Chai和Sinon的终极单元测试作弊表

sh Mocha Chai Node-TS NPM安装