簡體   English   中英

開玩笑 test.toBeInstanceOf(Error) 失敗

[英]Jest test .toBeInstanceOf(Error) fails

我無法檢查 promise 在 Jest 測試中是否因錯誤而拒絕。

(后 Jest 20 版本:)

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

(前 Jest 20 版本)

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

我已經嘗試了兩個版本,但 Jest 測試失敗:

Expected value to be an instance of:
  "Error"
Received:
  [Error: connect ECONNREFUSED 127.0.0.1:443]
Constructor:
  "Error"

而返回 function 的 promise 是:

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);
      });
  });
}

任何線索如何解決它? 謝謝。

從Jest 23開始到toThrow匹配器可以用於承諾返回功能。

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

或async / await版本:

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

標准笑話白痴,請參閱: https://github.com/facebook/jest/issues/2549進行解釋。 TL;DR Jest 全局變量與 Node 全局變量不同,因此 jest Error != node Error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM