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)
有线索如何解决吗?谢谢。
从 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)
| 归档时间: |
|
| 查看次数: |
7712 次 |
| 最近记录: |