Jest 的匹配器错误:接收到的值必须是一个函数

Ric*_*cky 3 javascript matcher throw jestjs

我正在前端工作,并测试我的库,我收到一个预期的错误,但我无法做出断言。我有下一个代码:

it('If the username is not entered, I get an error', () => {
    try {
      new SDK('test', {
        password: 'aaaabbbbcccc',
        key: 'ddddeeefff',
      });
    } catch (error) {
      expect(error).toThrow(
        `Error: The 'username' property has not been entered`
      );
    }
  });
Run Code Online (Sandbox Code Playgroud)

如您所见,为了对我的库进行身份验证,我需要:用户名、密码和密钥。这是我得到的错误:

在此输入图像描述

谢谢你!

Ric*_*cky 14

我发现了我的问题。“期望”必须捕获异常,然后使用适当的匹配器(没有 try/catch 块)

it('If the username is not entered, I get an error', () => {
  expect(() => {
    new SDK('test', {
      password: 'aaaabbbbcccc',
      key: 'ddddeeefff',
    });
  }).toThrowError(`The 'username' property has not been entered`);
});
Run Code Online (Sandbox Code Playgroud)

  • 我有类似的经历..我使用的地方等待期望(S3Client.getObject(s3Param.bucket,s3Param.key)).rejects.toThrow(“您请求的资源不存在”); (3认同)
  • 如果它是异步的并且您正在等待承诺,那么 `.rejects.toThrowError` 应该可以工作! (3认同)