[英]Jest test .toBeInstanceOf(Error) fails
I have trouble checking whether promise rejects with error in Jest test.我无法检查 promise 在 Jest 测试中是否因错误而拒绝。
(post Jest 20 version:) (后 Jest 20 版本:)
test("Rejects on error", () => {
expect.assertions(1);
return expect(promiseHttpsGet(null)).rejects.toBeInstanceOf(Error);
});
(pre Jest 20 version) (前 Jest 20 版本)
test("Rejects on error", () => {
expect.assertions(1);
return promiseHttpsGet(null).catch((err) => {
expect(err).toBeInstanceOf(Error);
});
});
I have tried both versions but Jest test fails with:我已经尝试了两个版本,但 Jest 测试失败:
Expected value to be an instance of:
"Error"
Received:
[Error: connect ECONNREFUSED 127.0.0.1:443]
Constructor:
"Error"
And the promise returning function is:而返回 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);
});
});
}
Any leads how to solve it?任何线索如何解决它? Thanks.谢谢。
From Jest 23 onwards toThrow
matcher can be used for promise returning functions. 从Jest 23开始到toThrow
匹配器可以用于承诺返回功能。
test("Rejects on error", () => {
expect.assertions(1);
return expect(promiseHttpsGet(null)).rejects.toThrow(Error);
});
Or the async/await version: 或async / await版本:
test("Throws on error", async () => {
expect.assertions(1);
await expect(promiseHttpsGet(null)).rejects.toThrow(Error);
});
Standard jest idiocy, see: https://github.com/facebook/jest/issues/2549 for explanation.标准笑话白痴,请参阅: https://github.com/facebook/jest/issues/2549进行解释。 TL;DR Jest globals differ from Node globals and thus jest Error
!= node Error
TL;DR Jest 全局变量与 Node 全局变量不同,因此 jest Error
!= node Error
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.