【问题标题】:Mocha / Chai testing: How can I make it more strict?Mocha / Chai 测试:我怎样才能让它更严格?
【发布时间】:2017-03-26 17:01:49
【问题描述】:

使用 Mocha 和 Chai,我注意到许多不可靠的测试。我希望这些都失败。类似的 StackOverflow 问题是因为异步而不使用 done()。即使这是我的情况,我也肯定希望它失败!

我的错字应该是exist。除非我在特定位置输入类型,否则它不会告诉我这一点。

  1. 为什么这个测试没有失败?
  2. 是不是我做错了什么?
  3. 如何让 Mocha / Chai 更严格?

这些都通过了!?

expect(component.find('textarea')).to.exest;
expect(component.find('textarea')).to.not.exest;
expect(component.find('textarea')).to.exsdafdsafdsfdsafest;

这不是。

expect(component.find('textarea')).BLAHASDF.exest;

TypeError: Cannot read property 'exest' of undefined

嗯,谢谢 Chai 现在告诉我!

好吧,我有点傻,但我可以向你保证,这让我非常沮丧!

是否有一些设置,或者我缺少什么,或者是否有另一个库胜过这个?

【问题讨论】:

  • 可以断言你的断言:expect(expect(component.find('textarea')).to.exest).to.exist
  • @robertklep ha,如果你这样做 expect(expect(component.find('textarea')).to.exest).to.exest 会怎样?我想你也可以断言断言的断言吗? :D
  • @fabio.sussetto 某人应该发明一个递归断言接口 ;) FWIW,一个不存在的属性将是 undefined,这是你可以测试的东西。但是,如果您需要确保没有拼写错误,基于函数的界面可能更合适:)
  • @robertklep,好人。大声笑

标签: reactjs testing npm mocha.js chai


【解决方案1】:

当您尝试访问未定义的属性时,您所描述的是“正常”的 javascript 行为。它与 Chai、Mocha 或任何其他库无关。

在 Javascript 中,尝试访问对象的未定义属性不会导致任何错误。例如,您可以这样做

var a = { foo: 'bar'};
console.log(a.baz);  // This logs undefined, doesn't cause any error.

因此,当您执行expect(component.find('textarea')).BLAHASDF.exest; 时,会引发错误,因为您首先尝试访问BLAHASDF,其计算结果为undefined,然后您尝试执行undefined.exest,这将引发错误,因为@987654331 @ 是原语,而不是对象。

我同意你的观点,尽管用于这些情况的 Chai Expect/Should API 并不理想。我更愿意做类似expect(component.find('textarea')).exist() 这样的错字(例如 .exests())确实会导致错误(“未定义不是函数”)。

正如 cmets 中所述,您确实可以在 Chai 中使用不同的断言样式:http://chaijs.com/api/assert/

如果您在这方面寻找另一个替代库,我会推荐 Jest https://facebook.github.io/jest/) 或者简约的 Tapejs (https://github.com/substack/tape)

【讨论】:

  • 这与 Mocha 无关,它与断言库无关。如果您更喜欢函数而不是属性,可以将 Chai 替换为 expect
  • @robertklep 你说得对,我要检查你是否可以交换断言库,因为我确实记得类似的事情。
  • robertklep, chai.expect?这就是我正在使用的。还有其他断言库吗?
  • 感谢@robertklep,我编辑了我的答案以明确您可以在 Chai 中使用不同的断言样式
  • @MichaelBruce Chai 提供了expect 的一种实现,但还有很多其他的断言库。我链接到的那个有不同的调用语义,可能更适合你。请参阅this search result 了解更多替代方案。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2021-05-27
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2017-09-07
  • 2011-06-14
相关资源
最近更新 更多