Javascript 如何让Jest按预期捕获抛出的错误?

Javascript 如何让Jest按预期捕获抛出的错误?,javascript,jestjs,try-catch,throw,Javascript,Jestjs,Try Catch,Throw,我试图开玩笑地写一些测试,并不断得到下面的结果。如何让Jest按预期捕获抛出的错误? 代码: 结果: × Test that TEXT_PROPERTIES can throw a typeError (11 ms) ● Test that TEXT_PROPERTIES can throw a typeError expect(received).toThrow() Received function did not throw 62 | exp

我试图开玩笑地写一些测试,并不断得到下面的结果。如何让Jest按预期捕获抛出的错误? 代码:

结果:

  × Test that TEXT_PROPERTIES can throw a typeError (11 ms)

  ● Test that TEXT_PROPERTIES can throw a typeError

    expect(received).toThrow()

    Received function did not throw

      62 |   expect(() => {
      63 |     testError();
    > 64 |   }).toThrow();
         |      ^
      65 | });
      66 | 

      at Object.<anonymous> (tests/components/typography/typography.test.js:64:6)

  console.error
    TypeError: why doesn't this work
×测试文本属性是否会抛出类型错误(11毫秒)
● 测试TEXT_属性是否会引发类型错误
expect(received).toThrow()
收到的函数没有抛出
62 |期望(()=>{
63 |测试仪错误();
>64 |}).toThrow();
|      ^
65 | });
66 | 
反对。(测试/组件/排版/排版.测试js:64:6)
控制台错误
TypeError:为什么这个不起作用

我已经阅读了很多关于这个问题的其他“答案”,但都不起作用。

testError
不会因为try-catch块而向外界抛出错误。从Jest的expect的角度来看,
testError
返回未定义的,而不是异常(错误)。下面是一个类似的测试:

函数测试仪错误(){
试一试{
抛出新的TypeError(`why not work`);
}捕获(e){
控制台错误(e);
}
}
var result=testError();
console.log(结果);//未定义

console.log(TypeError的结果实例);//false
测试仪错误
不会因为try-catch块而向外部世界抛出错误。从Jest的expect的角度来看,
testError
返回未定义的,而不是异常(错误)。下面是一个类似的测试:

函数测试仪错误(){
试一试{
抛出新的TypeError(`why not work`);
}捕获(e){
控制台错误(e);
}
}
var result=testError();
console.log(结果);//未定义

console.log(TypeError的结果实例);//false
这可以防止在运行时捕获错误。@TimMartin,我建议您测试这些函数。好了,Jest的工作前提是函数返回的内容,并将输出与预定义的预期输出进行比较。我看到您更新了答案,谢谢,但是将try-catch块移到函数调用之外会使我尝试测试的内容变得毫无意义。我必须重新评估我是如何进行这些测试的。这可以防止错误在运行时被发现。@TimMartin,我建议测试这些函数。好了,Jest的工作前提是函数返回的内容,并将输出与预定义的预期输出进行比较。我看到您更新了答案,谢谢,但是将try-catch块移到函数调用之外会使我尝试测试的内容变得毫无意义。我必须重新评估我如何接近这些测试。
  × Test that TEXT_PROPERTIES can throw a typeError (11 ms)

  ● Test that TEXT_PROPERTIES can throw a typeError

    expect(received).toThrow()

    Received function did not throw

      62 |   expect(() => {
      63 |     testError();
    > 64 |   }).toThrow();
         |      ^
      65 | });
      66 | 

      at Object.<anonymous> (tests/components/typography/typography.test.js:64:6)

  console.error
    TypeError: why doesn't this work