我在Jest中创建了测试助手功能Globals,以便能够在我们的每个测试文件中的整个应用程序中使用它们。
我打算将其从我们的测试文件中删除。我将转到setup-global.js文件,然后我会说global.loopExpect = WEBIDE
expect() // for looping case
get_array.test.js
global.loopExpect = (actuals) => {
return {
toContainKeys: (keys) => {
if (actuals.length > 0) {
for(var i = 0; i < actuals.length && i < 5; i++){
expect(actuals[i]).toContainKeys(keys)
}
}
}
}
}
运行测试时,我会收到一条错误消息,因为reals对象不包含对象对象的test('check contains Book property', async () => {
loopExpect([{title: 'SOLID Principles', author: 'Uncle Bob Martin'}])
.toContainKeys(['year'])
})
属性,对。
但是我在终端上收到错误报告,并在文件year
中的Object.toContainKeys中显示错误。即使我希望失败的测试上的错误消息出现在测试文件setup-global.js
中的Object.toContainKeys中。
如何在测试文件中捕获错误或get_array.test.js
函数引发错误,以便JEST认为该错误来自测试文件?
答案 0 :(得分:1)
首先,我认为您不需要loopExpect
,因为有一种更简单,更持久的方法来实现此目的:
test('check contains Book property', async () =>
[{title: 'SOLID Principles', author: 'Uncle Bob Martin'}].forEach(book =>
expect(book).toContainKeys(['year'])
)
)
但是,如果您真的想要一个辅助函数,并且需要知道测试失败的地方,那么一种知道的方法就是查看堆栈跟踪。而且,如果您希望错误具有不同的堆栈跟踪,并且测试文件的行位于顶部,则可以将测试包装在try
块中,然后从catch
抛出新错误。