javascript - Jest 中如何执行异步测试
问题描述
我正在尝试使用 Jest 进行测试。我想了解 JEST 在以下情况下的行为:
- 当异步函数传递给测试时
- 当包含异步代码的同步函数传递给测试时。
请检查下面的 sippet 以供参考。
我想知道测试是否在这两种情况下都异步执行。
it('should do async stuff...', async () => {
const result = await doSomething();
expect(result).toBe('value');
})
it('should do async stuff...', () => {
async () => {
const result = await doSomething();
expect(result).toBe('value');
}();
})
提前致谢
解决方案
由于第二个测试的函数没有声明为async
,它将同步运行。自调用函数将被执行,但 Jest 将在任何事情发生之前关闭执行范围。
您可以使用以下扩展代码段的代码自己清楚地看到它:
async function doSomething(ms) {
return new Promise((resolve) =>
setTimeout(() => {
resolve("value");
}, ms)
);
}
describe("compare async tests", () => {
it("test 1", async () => {
const result = await doSomething(2000);
console.log("test 1", { result });
expect(result).toBe("value");
});
it("test 2", () => {
(async () => {
const result = await doSomething(1000);
console.log("test 2", { result });
expect(result).toBe("value");
})();
});
});
运行上述代码会将两个测试都标记为成功,但您只会在控制台输出中看到“test 1”。
推荐阅读
- python - Bokeh 可以检测屏幕尺寸并重塑移动设备的布局吗?
- c++ - 交换两个对象的两个属性的值
- python - txt 与 dict 的 str 成 dict
- amazon-cloudwatch - CloudWatch Log Insights 中的多方面时间序列可视化
- compiler-construction - 转译/代码生成 - 变量声明问题
- javafx - 尝试使用 FXML 文件进行编译时,JavaFX 程序不起作用
- python - 错误:[Index(['...'], dtype='object')] 中没有一个在 [index] 中
- java - 带有浮动操作按钮的 Android 导航抽屉
- python - 如何将 pandas 3 列数据框中的列转换为 Python 中的矩阵格式?
- spring - 如何在 JPQL RestRepository 中过滤加入