在玩笑中创建客户期望时捕获错误

时间:2019-01-16 14:22:25

标签: jestjs

我在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认为该错误来自测试文件?

1 个答案:

答案 0 :(得分:1)

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

test('check contains Book property', async () =>
    [{title: 'SOLID Principles', author: 'Uncle Bob Martin'}].forEach(book => 
        expect(book).toContainKeys(['year'])
    )
)

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