使用Mocha和Chai,我注意到许多不可靠的测试。我希望这些都失败。类似的StackOverflow问题是因为Async而不是使用done()。即使这是我的情况,我肯定希望它失败!
我应该是exist
的拼写错误。除非我在特定的位置做出类型,否则它不会告诉我这个。
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现在告诉我了!
好的,我有点傻,但我可以向你保证,这让我很沮丧!
是否有一些设置,或者是否有我遗漏的东西,或者是否有其他图书馆胜过这个?
答案 0 :(得分:2)
当您尝试访问未定义的属性时,您描述的是“正常”的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
,这会引发错误,因为undefined
是基元,而不是对象。
我同意你的观点,但Chai Expect /这些案例的API应该不理想。我更喜欢做expect(component.find('textarea')).exist()
之类的内容,以便在那里输入错误(例如.exests())确实会导致错误(“未定义不是函数”)。
如评论中所述,您确实可以在Chai中使用不同的断言样式:http://chaijs.com/api/assert/
如果您在这方面寻找另一个替代图书馆,我建议使用Jest https://facebook.github.io/jest/) 或简约的Tapejs(https://github.com/substack/tape)