Jestjs 创建custome expect时捕获错误

Jestjs 创建custome expect时捕获错误,jestjs,Jestjs,我将测试助手函数创建为Globals in Jest,以便能够在应用程序的每个测试文件中使用它们 我要把这个从我们的测试文件中删掉。我将转到setup-global.js文件,然后我会说global.loopExpect=expect()//for looping case global.loopExpect = (actuals) => { return { toContainKeys: (keys) => { if (actuals.length >

我将测试助手函数创建为Globals in Jest,以便能够在应用程序的每个测试文件中使用它们

我要把这个从我们的测试文件中删掉。我将转到setup-global.js文件,然后我会说global.loopExpect=
expect()//for looping case

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)
        }
      }
    }
  }
}
当测试运行时,我应该会得到一个错误,因为actuals对象不包含r对象的
year
属性,对吗

但是我在终端上得到一个错误报告,并在文件
setup global.js
中显示at Object.toContainKeys中的错误。即使我希望失败测试的错误消息出现在测试文件
get\u array.test.js
中的Object.toContainKeys中


如何让测试文件捕获错误或
global.loopExpect()
函数抛出错误,以便JEST认为错误来自测试文件???

首先,我认为您不需要
loopExpect
,因为有一种更简单、更持久的方法来实现这一点:

test('check contains Book property',async()=>
[{标题:'坚实的原则',作者:'鲍勃·马丁叔叔'}).forEach(书=>
expect(book).toContainKeys(['year']))
)
)

但是,如果您真的想要一个helper函数,并且需要知道测试失败的地方,那么一种方法就是查看堆栈跟踪。如果您希望错误具有不同的堆栈跟踪,并且测试文件中的行位于顶部,那么您可以将测试包装在
try
块中,并从
catch
块抛出新错误。

是的,您是对的,这更有意义。谢谢你对错误的描述。
test('check contains Book property', async () => {
  loopExpect([{title: 'SOLID Principles', author: 'Uncle Bob Martin'}])
    .toContainKeys(['year'])
})