开玩笑测试 .toBeInstanceOf(Error) 失败

Pet*_*nis 10 javascript unit-testing jestjs

我无法检查 Promise 是否在 Jest 测试中因错误而拒绝。

(Jest 20 版本后:)

  test("Rejects on error", () => {
    expect.assertions(1);
    return expect(promiseHttpsGet(null)).rejects.toBeInstanceOf(Error);
  });
Run Code Online (Sandbox Code Playgroud)

(Jest 20 之前的版本)

  test("Rejects on error", () => {
    expect.assertions(1);
    return promiseHttpsGet(null).catch((err) => {
      expect(err).toBeInstanceOf(Error);
    });
  });
Run Code Online (Sandbox Code Playgroud)

我已经尝试了两个版本,但 Jest 测试失败:

Expected value to be an instance of:
  "Error"
Received:
  [Error: connect ECONNREFUSED 127.0.0.1:443]
Constructor:
  "Error"
Run Code Online (Sandbox Code Playgroud)

承诺返回函数是:

function promiseHttpsGet(url) {
  return new Promise((resolve, reject) => {
    https
      .get(url, (response) => {
        let responseBody = "";
        if (response.statusCode !== 200) {
          reject(response.statusCode);
        }
        response.setEncoding = "utf8";
        response.on("data", (data) => {
          responseBody += data;
        });
        response.on("end", () => {
          resolve(responseBody);
        });
      })
      .on("error", (error) => {
        reject(error);
      });
  });
}
Run Code Online (Sandbox Code Playgroud)

有线索如何解决吗?谢谢。

Pet*_*nis 4

从 Jest 23 开始,toThrow匹配器可用于 Promise 返回函数。

  test("Rejects on error", () => {
    expect.assertions(1);
    return expect(promiseHttpsGet(null)).rejects.toThrow(Error);
  });
Run Code Online (Sandbox Code Playgroud)

或者异步/等待版本:

  test("Throws on error", async () => {
    expect.assertions(1);
    await expect(promiseHttpsGet(null)).rejects.toThrow(Error);
  });
Run Code Online (Sandbox Code Playgroud)

  • 显然,同样的问题。` 预期的构造函数:错误收到的构造函数:错误 ` 为什么投票? (2认同)