代码之家  ›  专栏  ›  技术社区  ›  PeterDanis

玩笑测试。toBeInstanceOf(错误)失败

  •  6
  • PeterDanis  · 技术社区  · 9 年前

    (后Jest 20版本:)

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

    (笑话前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 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);
          });
      });
    }
    

    任何线索如何解决?

    1 回复  |  直到 9 年前
        1
  •  5
  •   PeterDanis    8 年前

    从Jest 23开始 toThrow matcher可用于承诺返回函数。

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

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