Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何刷新Jest 26+以来的承诺

如何刷新Jest 26+以来的承诺
EN

Stack Overflow用户
提问于 2022-04-20 07:06:52
回答 1查看 942关注 0票数 1

Jest 26发布了一个基于@sinonjs/ fake timers的伪计时器的新实现。

以前我用过const flushPromises = () => new Promise(setImmediate);

现在我正试着用

await new Promise(process.nextTick);

正如这里所描述的:How to make Jest wait for all asynchronous code to finish execution before expecting an assertion,但在某些情况下它不起作用。

示例代码不工作时(jest版本: 27.5.1):

代码语言:javascript
代码运行次数:0
复制
class SuperFetch {
    public static async get(): Promise<string> {
        return 'never mind';
    }
}

class ClassForTest {
    public async get(): Promise<string> {
        return SuperFetch.get();
    }
}

带有遗留假计时器的Test1 (已通过):

代码语言:javascript
代码运行次数:0
复制
jest.useFakeTimers('legacy');
describe('Test', () => {

    const flushPromises = (): Promise<void> => new Promise(setImmediate);
    
    test('should flush promise', async () => {
        SuperFetch.get = jest.fn().mockResolvedValue('test');
        const instance = new ClassForTest();
        let result;
        instance.get().then(x => {
            result = x;
        });

        jest.advanceTimersByTime(1000);
        await flushPromises();

        expect(result).toBe('test');
    });
});

现代假计时器的Test2 (失败)

代码语言:javascript
代码运行次数:0
复制
jest.useFakeTimers('modern');
describe('Test', () => {
    test('should flush promise', async () => {
        SuperFetch.get = jest.fn().mockResolvedValue('test');
        const instance = new ClassForTest();
        let result;
        instance.get().then(x => {
            result = x;
        });

        jest.advanceTimersByTime(1000);
        await new Promise(process.nextTick);

        expect(result).toBe('test');
    });
});

引发的失败:“超过5000 ms的测试超时。在调试期间冻结在await new Promise(process.nextTick)上。

EN

回答 1

Stack Overflow用户

发布于 2022-05-03 07:27:17

在我的测试中,我使用了您描述的flushPromises方法

const flushPromises = () => new Promise(setImmediate);

但是为了使这个工作,我必须导入setImmediate

import { setImmediate } from 'timers';

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71942029

复制
相关文章
聊聊jest的IdleConnectionReaper
jest-common-6.3.1-sources.jar!/io/searchbox/client/config/idle/IdleConnectionReaper.java
code4it
2019/04/22
9790
聊聊jest的IdleConnectionReaper
边缘计算如何实现5G的承诺
前几年在巴塞罗那举行的世界移动通信大会(Mobile World Congress)——世界上首屈一指的移动消费电子产品大会——关注的主题是如何让下一个10亿人上网。在今年的活动上,你每走一分钟都能看到有人在兜售5G的承诺。5G是下一代蜂窝移动通信,有望带来更高的数据速率、更低的延迟和大规模设备连接。
边缘计算
2019/07/03
8680
边缘计算如何实现5G的承诺
聊聊jest的NodeChecker
jest-common-6.3.1-sources.jar!/io/searchbox/client/config/discovery/NodeChecker.java
code4it
2019/04/21
1.1K0
聊聊jest的NodeChecker
聊聊jest的NodeChecker
jest-common-6.3.1-sources.jar!/io/searchbox/client/config/discovery/NodeChecker.java
code4it
2019/05/06
8070
Cloudera对开源的承诺
7 月 10 日,合并后的 Cloudera 宣布了新的开源许可模式,并计划对所有产品的新版本实施许可证变更,不追溯已经发布的版本。在合并之前,这两家公司是在不同的开源许可模式下发布各自的产品,新模式将 Hortonworks 和 Cloudera 之前使用的许可模式进行了整合。
Fayson
2019/07/17
3.7K1
【全面AI,微软刷新】Windows部门被拆,纳德拉宣布上任以来最大重组
精彩回顾 2018 新智元产业跃迁 AI 技术峰会今天隆重启幕,点击链接观看大会盛况: 爱奇艺 http://www.iqiyi.com/l_19rr3aqz3z.html 腾讯新闻 http://v.qq.com/live/p/topic/49737/preview.html 新浪科技 http://video.sina.com.cn/l/p/1722511.html 云栖社区 https://yq.aliyun.com/webinar/play/419 斗鱼直播 https://www.
新智元
2018/04/18
7310
【全面AI,微软刷新】Windows部门被拆,纳德拉宣布上任以来最大重组
jest如何执行单组测试用例
假如有这个文件tests/test.test.ts: describe('test-group', () => { it('t1', async() => { console.log('t1'); }); it('t2', () => { console.log('t2'); }); }); 我只想运行里面的t2,则可以这样: npx jest tests/test.test.ts --testNamePattern="test-group t
黒之染
2022/03/22
6740
【自动化测试】【Jest-Selenium】(01)—— Jest 入门
按照软件工程自底而上的概念,前端测试一般分为单元测试(Unit Testing )、集成测试(Integration Testing)和端到端测试(E2E Testing)。
WEBJ2EE
2020/09/24
1.8K0
Excel如何刷新模型
但老师
2022/03/22
1.1K0
Excel如何刷新模型
昨天承诺的SweetPotato提权
一开始发到了t00ls,结果很多师傅问我用法,录了个小视频,大家可以看下用法,工具在文末,需要的自取。
鸿鹄实验室
2021/04/15
2.4K0
学习笔记——在vue中如何配置Jest(一)
  最近在搞Jest单元测试,如何在vue中安装和使用jest我就不说了,前一篇文章简单的说了一下在使用jest时遇到的一些问题,但是我觉得并没有真正的解决的很好。后面会在学习过程中更新前面的那篇文章,加入后续遇到的问题以及解决问题的方法,持续的做一个记录。
全栈程序员站长
2022/07/21
2K0
学习笔记——在vue中如何配置Jest(一)
学习笔记——在vue中如何配置Jest(一)
  最近在搞Jest单元测试,如何在vue中安装和使用jest我就不说了,前一篇文章简单的说了一下在使用jest时遇到的一些问题,但是我觉得并没有真正的解决的很好。后面会在学习过程中更新前面的那篇文章,加入后续遇到的问题以及解决问题的方法,持续的做一个记录。
zaking
2019/04/09
1.8K0
学习笔记——在vue中如何配置Jest(一)
Linkerd对开放治理的承诺
考虑到谷歌最近宣布它不会向中立基金会捐赠KNative或Istio,现在似乎是描述Linkerd对开放治理主题的方法的合适时机。
CNCF
2019/12/04
6580
【自动化测试】【Jest-Selenium】(03)—— Jest 异步测试
在JavaScript中执行异步代码是很常见的。当你有以异步方式运行的代码时,Jest 需要知道当前它测试的代码是否已完成,然后它可以转移到另一个测试。
WEBJ2EE
2020/10/09
1.4K0
【自动化测试】【Jest-Selenium】(03)—— Jest 异步测试
如何刷新cdn缓存 cdn缓存的任务
众所周知,网络技术对于一个国家拥有着非常重大的作用,现如今我国投入了大量的科研经费在网络技术的发展中,其主要目的就是为了利用网络技术来造福百姓。目前大家熟知的cdn就是在普通网络技术之上编辑形成的一个新的虚拟网络,利用这个虚拟网络传输数据就会更加的轻松简单。但是大家在生活中同样也要学会如何刷新cdn缓存。
用户8715145
2021/09/18
13.4K0
如何刷新cdn缓存 cdn缓存的任务
聊聊springboot jest autoconfigure
spring-boot-autoconfigure-2.1.4.RELEASE-sources.jar!/org/springframework/boot/autoconfigure/elasticsearch/jest/JestProperties.java
code4it
2019/04/20
1.2K0
聊聊springboot jest autoconfigure
Volatile 可见性承诺
Java Volatile 关键字是一种轻量级的数据一致性保障机制,之所以说是轻量级的是因为 volatile 不具备原子性,它对数据一致性的保障体现在对修改过的数据进行读取的场景下(也就是数据的可见性)。比起对读操作使用互斥锁, volatile 是一种很高效的方式。因为 volatile 不会涉及到线程的上下文切换,以及操作系统对线程执行的调度运算。同时 volidate 关键字的另一个功能是解决“指令重排序问题”。
不会飞的小鸟
2020/03/17
6930
【自动化测试】【Jest-Selenium】(02)—— Jest 匹配器
Use .toBe to compare primitive values or to check referential identity of object instances. It calls Object.is to compare values, which is even better for testing than === strict equality operator.
WEBJ2EE
2020/10/09
8260
如何手动刷新cdn缓存 为何要手动刷新cdn缓存
cdn是一个新型的模拟内容分发网络,虽然cdn和大家在生活中使用的网络有一切的区别,但是cdn出现确实能够使网速得到大大的提高。然而,大家在使用cdn的时候会需要注意很多问题,其中最主要的就是要学会如何手动刷新cdn缓存。一旦长时间不刷新cdn缓存会给cdn使用带来一些困难,最终同样也会影响网络数据的传输。
用户8715145
2021/09/18
11.7K1
如何手动刷新cdn缓存 为何要手动刷新cdn缓存
点击加载更多

相似问题

如何嘲笑jest承诺

117

如何用Jest模拟拒绝承诺

110

Jest中的测试承诺

22

Jest:测试嵌套承诺

11

带有超时Jest的测试承诺

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档