当前位置: 首页 > 知识库问答 >
问题:

如何在Jest中测试抛出异常的类型

养星汉
2023-03-14

我正在处理一些代码,需要测试函数抛出的异常类型(是TypeError、ReferenceError等吗?)。

我当前的测试框架是AVA,我可以将其作为第二个参数t.throws方法进行测试,如下所示:

it('should throw Error with message \'UNKNOWN ERROR\' when no params were passed', (t) => {
  const error = t.throws(() => {
    throwError();
  }, TypeError);

  t.is(error.message, 'UNKNOWN ERROR');
});

我开始用笑话重写我的测试,但找不到如何轻松做到这一点。这有可能吗?

共有3个答案

仲孙善
2023-03-14

我用的是稍微简洁一点的版本:

expect(() => {
  // Code block that should throw error
}).toThrow(TypeError) // Or .toThrow('expectedErrorMessage')
别烨熠
2023-03-14

这有点奇怪,但它很有效,而且IMHO可读性很好:

it('should throw Error with message \'UNKNOWN ERROR\' when no parameters were passed', () => {
  try {
      throwError();
      // Fail test if above expression doesn't throw anything.
      expect(true).toBe(false);
  } catch (e) {
      expect(e.message).toBe("UNKNOWN ERROR");
  }
});

Catch块捕获您的异常,然后您可以对引发的Error进行测试。如果不抛出预期的Error,则需要奇怪的期望(true). toBe(false);才能通过测试。否则,该行将永远无法访问(Error应在它们之前引发)。

@Kenny Body建议了一个更好的解决方案,如果您使用expect,可以提高代码质量。断言()

it('should throw Error with message \'UNKNOWN ERROR\' when no parameters were passed', () => {
  expect.assertions(1);
  try {
      throwError();
  } catch (e) {
      expect(e.message).toBe("UNKNOWN ERROR");
  }
});

请参阅原始答案和更多解释:如何测试Jest中抛出的异常的类型

薛经艺
2023-03-14

开玩笑的是,您必须将函数传递到expect(函数)中。托托罗(

例子:

test("Test description", () => {
  const t = () => {
    throw new TypeError();
  };
  expect(t).toThrow(TypeError);
});

或者,如果您还想检查错误消息:

test("Test description", () => {
  const t = () => {
    throw new TypeError("UNKNOWN ERROR");
  };
  expect(t).toThrow(TypeError);
  expect(t).toThrow("UNKNOWN ERROR");
});

如果您需要测试一个现有函数是否抛出一组参数,您必须将其包装在期望()中的匿名函数中。

例子:

test("Test description", () => {
  expect(() => {http.get(yourUrl, yourCallbackFn)}).toThrow(TypeError);
});

 类似资料:
  • 假设我有以下功能: 根据Jest文档,我应该能够使用以下代码测试函数是否引发异常: 但是,我得到了以下错误。 有人能告诉我我做错了什么吗? 谢谢!

  • 我有一个方法: 这是用户授权测试的样子: 有没有办法检查用户输入错误密码的情况?因为在我发送错误密码的情况下,它不起作用,因为 使在你检查密码之前返回结果。

  • 由于一个我不知道的事件,调用在我的Ubuntu18.04中不再起作用。(自4月开始运行)。或I阶段尝试的任何其他生命周期都运行良好。 例如,如果我在克隆到中的Apache Commons IO的最新版本中运行,If显示 target/surefire-reports包含以下内容的许多重复 我尝试的任何其他项目都表现出类似的行为。 我尝试下载maven 3.5.4,解压缩它,通过将它添加到路径中,并

  • 我用Spock测试Java代码。我测试这段代码: 我写了一个测试: 它失败是因为抛出了另一个CustomException。但是在块中,我捕获这个异常并抛出一个,因此我希望我的方法将抛出,而不是。如何测试它?

  • 假设我有这样一个函数: 我想测试它是否使用Jest抛出一个(不仅仅是一个)。 然而,这项测试通过了。 如何检查Jest中异步抛出的错误类型?

  • 试图利用本SO帖子中概述的方法。 我有以下类型的例外: 这个函数抛出它: 这项工作: 但这并不: 有人知道为什么后者不起作用吗?笑话日志: