javascript - 期望 Jest 中的超时被拒绝
问题描述
我有一个 mongodb 连接,我想在数据库关闭时测试 try catch。所以它尝试连接到数据库,当它失败时会抛出一个错误。但这不是开玩笑的。我想得到一个超时,所以错误是 trown,但开玩笑只是显示一个超时错误
it('should not be able to create a new class if database is down', async () => {
await fakeMongodb.closeDatabase();
await expect(
createLesson.execute({
name: 'Lesson Test',
description: 'Description Test',
video: 'testurlvideo.com',
data_init: 20210321,
data_end: 20211031,
}),
).rejects.toBeInstanceOf(AppError);
await fakeMongodb.connect();
});
超时后如何拒绝?
解决方案
您正在查看的问题很可能是由于 async test in 的jest
超时时间和mongodb.connect
默认情况下,任何异步测试的超时时间都是 5000 毫秒。而对于大多数 mongodb 驱动程序,默认情况下最多为 30000 毫秒(请查看您正在使用的驱动程序的文档)
我将假设您正在进行单元测试,这意味着 fakeMongodb 可能是mock
实际 mongodb 客户端的一个版本。因此,您可能应该分享您是如何进行模拟的,或者只是纯粹使用 automock。
如果您通过实际连接到数据库进行测试,您可以调整 jest 测试的超时以匹配您正在使用的驱动程序的超时。
--testTimeout= 30000// timeout of 30s
这将适用于所有测试用例。
要只为特定函数提供超时,那么您可以在声明测试用例时使用此语法。
test(name, fn, timeout)
例子
test('example', async () => {
}, 10000); // timeout of 10s (default is 5000)
推荐阅读
- ruby-on-rails - 如何从 Rails 应用程序的数据库配置文件中获取全局变量?
- sql - JPA 序列 id 增量与直接 DB 插入 id 增量
- javascript - 存根推送器(事件)Javascript
- android - 如何使用service获取打开了哪个app的信息?
- php - 在 Laravel 5 中使用 get()
- python - 如何在不规则物体内部生成随机点和格点?
- .net-core - grpc .net-core 应用程序在本地外部不可见
- node.js - createReadStream() 如何在 aws-sdk 中工作?
- php - 在 Laravel 中将对象转换为关联数组
- ionic-framework - 如何更改 ion-select 的默认警报弹出窗口的样式?