首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Jest测试包含setTimeout调用的函数踩坑记录

为了测试执行失败时有发生重试,我编写了如下的测试用例: // job-queue.test.js const MockJob = jest.fn(() => { return { id: 0...解决办法也非常简单,只需要在调用enqueueJob调用后先调用一下await delay(0)就行了,这句话意味着我们的测试用例代码执行后面的代码之前一定要至少等待一轮Tick,于是我们catch...Fake timer 这样修改之后测试用例虽然可以通过了,但如果将上面的3s改成6s,我们就会遇到超时错误: [image-20210823195537643.png] 这是因为Jest每个测试用例默认只给了...虽然从错误信息中我们知道可以通过jest.setTimeout来修改这个默认超时时间,但这个测试用例实际运行的时候也的确需要等待6s,如果我们有什么测试用例需要等待几分钟甚至几小时,那总不能在CI上卡个几小时等待用例通过吧...启用fake timer的时候,setTimeout、setInterval都会使用Jest提供的假实现,他们不会真正阻塞住测试用例。

6.7K60

异步函数中的异常处理及测试方法

有基本的了解 安装 Node.Js 和 Jest 如何从 Javascript 的常规函数中抛出错误 使用异常不是返回码(清洁代码)。...这是对它的测试(使用Jest): ? 也可以从 ES6 的类中抛出错误 Javascript 中编写类时,我总会在构造函数中输入意外值。下面是一个例子: ? 以下是该类的测试: ?...错误被包含在了Promise rejection中。 换句话说,我不能使用 assert.throws 来测试它。 让我们通过测试来验证一下: ? 测试失败了! ? 有没有悟出点什么?...下面的代码不会捕获错误: ? 记住:被拒绝的Promise会在堆栈中传播,除非你抓住(catch)它。 要在 try/catch 中正确捕获错误,可以像这样重构: ? 这就是它的工作原理。...以下是Jest测试异常的规则: 使用 assert.throws 来测试普通函数和方法中的异常 使用 expect + rejects 来测试异步函数和异步方法中的异常 如果你对如何使用 Jest

2.9K30
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript 测试系列实战(二):深层渲染和快照测试

通常我们会在集成测试中使用 mount 函数,测试组件之间如何协同工作,不仅仅是作为独立的单元。 如果你不了解单元测试和集成测试这两个术语,可以看下本系列第一篇教程。...测试与 DOM 的交互或者处理高阶组件时,mount 函数也可以派上用场。_Mount 使用 DOM 实现的模拟,Jest 默认使用的是 jsdom。...当我们再次运行快照测试时,Jest 会将新的快照与旧的快照进行比较,如果两者不一致,测试就会失败,从而帮助我们确保用户界面不会发生意外改变。...如果我们要更新所有失败的快照,可以使用 -u 标志(别名为 --updateSnapshot) 来运行 Jest。...除此之外,我们还介绍了 Jest 快照测试,这是一个非常强大的工具,可以追踪组件渲染方式的变化。接下来的文章中,我们还将介绍测试中常见的 Mock 技巧——与组件的模拟交互,不见不散!

2.1K20

浅谈前端测试

,先别急着纠错,这段测试本身是错的,下面慢慢分析   我们最开始创建了一个 mocks 对象,用来模拟数据,由于 readFileSync 方法可能存在多种返回结果(成功或报错),所以暂时用 jest.fn...() 模拟   other 里面则是放一些固定的测试数据(不会随着测试过程改变)   beforeAll 钩子里面执行我们的 mock,把 require 进来的 fs 模块拦截调,也是本测试用例中的关键步骤...).toBeCalledWith(this.mocks.other.text)   下面补一下 read file 失败测试 test('read file fail throw error', ()...,错误的情况程序是否有异常处理,逻辑是否正确等。...,测试过程尽量覆盖所有判断条件,不是全部通过了就不管了,进一阶说,100% 的测试覆盖率并不证明一定覆盖到位了,因为顺带执行的代码也会算进覆盖率,例如 module.export = (list)

1.7K10

JavaScript 测试教程–part 3:测试 props,挂载函数和快照测试

在这种情况下子组件将根本不会被渲染。所以上面的测试失败了,你需要了解“浅渲染”的局限性。 Mount 模拟了 DOM 的实现, Jest 默认使用 jsdom。...前面失败测试现在将会通过。 由于 mount 函数可渲染更多内容并模仿实际的 DOM,所以测试将会花费更多时间。使用 mount 函数可能意味着你是进行单元测试现在在进行集成测试。...测试期间,将渲染组件并创建其快照。它包含渲染组件的整个结构,应该与测试本身一起提交给存储库。再次运行快照测试时,新的快照将与旧的进行比较。如果它们不同,则测试失败。...这将帮助你确保用户界面不会被意外更改。...你还可以 watch 模式下运行 Jest,这能够允许你一个接一个地更新所有有冲突的快照。

1.7K20

React Hook测试指南

如果A同学有对useOptions进行单元测试的话,这个悲剧可能就不会发生了,因为A同学在为useOptions编写单元测试的时候就考虑了options为数组的情况,并且B同学使用之前就修复了这个问题...单元测试需要注意的问题 隔离性 上面我们说到单元测试是对代码独立的单元进行测试,这个独立的意思不是说这个函数(单元)不会调用另外一个函数(单元),而是说我们测试这个函数的时候如果它有调用到其它的函数我们就需要...mock它们,从而将我们的测试逻辑只放在被测试函数的逻辑上,不会受到其它依赖函数的影响。...单元测试要注意隔离性的另外一个原因是它可以保证当测试案例失败的时候我们可以十分容易定位到问题的所在。...过程中出现的任何错误

1.7K10

ts + Jest 单元测试中 debugging

温馨提示:微信中外链都无法点击,请通过文末的 “阅读原文” 到技术博客中完整查阅版; 本文简要介绍了如何在 Jest 单元测试中利用 Chrome Node DevTools 来辅助调试 1、背景 代码是...TS 写的 所测功能无 UI 界面,且出现 bug 初步定位到是循环体内部问题,功能较为复杂 用 console 式 debug 效率太低,需要打断点式调试 Jest 单测中进行 debugger...2、步骤 认为可能失败并输入的测试中插入一个 debugger。...Jest运行测试用例的特点是多进程并发运行不同测试案例,达到快速的效果。但是这样对调试来说是没法进行的。这个参数保证了使用一个进程运行所有代码。 接下来就可以开心的 debug 了: ?...的配置项教程,涵盖了 debug 全部测试文件 和 debug 单个测试文件 这两种场景,足够了 Debugging TypeScript Jest Tests With Visual Studio

3.9K30

测试驱动开发 Test-Driven Development

测试驱动开发的要义是:测试先行,没有失败测试,就不允许实现。所以,动手前我们需要想清楚题目要实现什么,即拆解需求。...不喜欢写测试的程序员,通常将经历这样的消极循环:感到恐惧,因为没测试 -> 越恐惧,压力越大 -> 压力越大,越不会测试善用测试的程序员呢?...Red Bar Patterns Red Bar,顾名思义:执行测试失败而显示红色的状态栏 要让测试失败,那首先要写下你的测试,我们上一节介绍了需求拆分,得到了一份todo-list,那我们究竟该自顶向下实现...Green Bar Patterns Green Bar,顾名思义:执行测试成功而显示绿色的状态栏 FizzBuzz实现的过程中,我们用到了几种快速让测试通过的技巧,分别是: Fake It ('Til...如果是测试驱动出来的代码,将拥有输入输出清晰、幂等性特点。 每当添加新特性前,先思考清楚,先写测试,代码不会随乱涂乱改腐败。 同事协作时之间更放心 你产出的代码值得信赖。

1.6K10

web前端好帮手 - Jest单元测试工具

现在只需要运行npm install -D jest一键安装Jest,便可以快速接入单元测试编写中。...test('必要参数uid漏传报错', () => { expect(fetchUserInfo()).toThrow(); }); 注意测试错误抛出时,要在测试逻辑外加一层函数包裹,Jest才能捕获到错误...另外,要注意系统路径的差异,可能会造成Mac上编写的测试Windows上却运行失败: // window的路径,Mac上会报错expect(value).toMatchInlineSnapshot(...所以推荐大家用.toMatchSnapshot([快照名称])给快照设置命名,差异对比就能一眼看出是哪句测试代码出问题了,也不会有维护的问题。 React组件如何覆盖测试?...首先,由于Jest启动多个进程,并发地跑测试,我们使用node-inspect的方式去跑断点调试时,chrome://inspect页面上断点不会被中断,导致我们无法断点调试。

4.9K40

单元测试:代码质量的无名英雄

这个话题可以像咖啡导致的通宵一样令人兴奋,也可以像恐怖一样可怕null pointer exception,这取决于你如何看待它。但抛开笑话不谈,这很重要。为什么我们需要单元测试?‍...:使用 Node.js 环境中的 Jest 等工具,您可以获得即时反馈。...每当您保存文件时,测试都会自动运行。代码信心:您获得了安全网,使未来的更改风险更小并且更容易实施。简化调试:当测试失败时,您只需要考虑最新的更改,使调试更简单。...学习曲线:设置测试环境和学习语法可能会令人生畏,但完全值得。错误的安全感:通过测试并不能 100% 保证您的代码没有错误。集成测试和端到端测试也很重要。...坚守的底线如果您在专业环境中进行编码,尤其是使用 AWS 和无服务器技术处理复杂系统时,单元测试不是可选的;他们是必须的。最初的努力将在可维护性、稳健性和安心方面得到回报。

14500

Vue 应用单元测试的策略与实践 02 - 单元测试基础

的单元测试失败。...但这时需要注意的是,该模板的所有功能都已经被 Mock 掉,不会再从原模块当中返回,所以我们就需要重新实现该模块中的所有功能。...(); expect(spy).toHaveBeenCalled(); expect(isPlaying).toBe(true); }) Spy 并不会影响到原有模块的功能代码,只是充当一个监护人的作用...从上文的一些例子当中,我们也可以看到,不管是 Fake/Stub/Mock/Spy 最最重要的一个原则就是「简单」,因为我们是测试代码,所依赖的模块就应该以最简单的形态展现出来,绝不要给 jest.fn...保持单元测试独立性的同时,也是促使你去思考什么样的模块才是符合「职责单一原则」的。单元测试站在使用者的角度来使用该模块,代码的易测性也就代表着代码的可维护性。 如何测试异步代码?

2.2K20

那些年错过的React组件单元测试(上)

因此单元测试的概念在前端领域应运而生,通过编写单元测试可以确保得到预期的结果,提高代码的可读性,如果依赖的组件有修改,受影响的组件也能在测试中及时发现错误测试类型又有哪些呢?...coverageReporters: 列出包含 reporter 名字的列表, Jest 会用他们来生成覆盖报告 coverageThreshold: 测试可以允许通过的阈值 moduleDirectories...() 一般真实的项目里,测试异步函数的时候,不会真正的发送 ajax 请求去请求这个接口,为什么?...jest.mock('axios'),我们让jest去对axios做模拟,这样就不会去请求真正的数据了。...当我们再次运行快照测试时,Jest 会将新的快照与旧的快照进行比较,如果两者不一致,测试就会失败,从而帮助我们确保用户界面不会发生意外改变。 ?

4.9K20

React Native自动化测试

我们期待你能帮助我们提高测试覆盖率,以及提供更多的测试代码或是测试用例。 使用Jest测试 Jest命令行通过node来执行的纯js测试工具。测试代码放置__tests__目录下。...你可以react-native源代码的根目录中使用如下命令来运行现有的jest测试代码: npm test 我们建议你贡献代码的时候也添加自己的测试代码。...注意:要运行你自己的测试代码,请首先去jest的官网阅读指导文档,然后package.json中加入jest对象,在其中包含一些预备测试环境的脚本。下面是一个示例: ......测试代码需要以JS写成的,并且必须在测试完成后调用TestModule.markTestCompleted()方法,否则测试过程会超时并且失败失败的表现一般是抛出一个JS异常。...只需UIExplorer/UIExplorerSnapshotTests.m中设置_runner.recordMode = YES;,然后重新运行先前失败测试代码,再之后将这一设置改回去,最后提交/

3K60

JavaScript 测试系列实战(三):使用 Mock 模拟模块并处理组件交互

在编写测试时,外部 API 可能由于各种原因而失败。我们希望我们的测试是可靠和独立的,最常见的解决方案就是 Mock。...编写 axios 模块的 mock 文件 Jest 支持对整个模块进行 Mock,使得组件不会调用原始的模块,而是调用我们预设的 Mock 模块。...打开 TodoList 的测试文件,首先在最前面通过 jest.mock 配置 axios 模块的 Mock(确保要在 import TodoList 之前), Mock 之后,无论测试还是组件中使用的都将是...从测试返回 promise 是确保 Jest 等待其异步方法执行结束的一种方法。 小结 本文中,我们介绍了 mock 模块,并将其用于伪造API调用。...让我们开始测试它是否不会引发任何错误,我们创建 useModalManagement.test.js // src/useModalManagement.test.js import useModalManagement

4.8K20

你需要了解的前端测试“金字塔”

单元测试会浅渲染组件,并断言当我们与它们交互时,它们的行为是正确的。 浅渲染意味着我们渲染组件一层深度。这样我们可以确保只测试组件,单元,不是几个级别的子组件。...用 JavaScript 编写快照测试的最好方法是使用 JestJest 不是拍摄渲染组件的图片,而是渲染组件标记的快照。 这使得 Jest 快照测试比传统快照测试快得多。...每次运行单元测试时,都会重新生成一个快照,并将其与之前的快照进行比较。 如果代码改变,Jest 会抛出一个错误,并警告标记已经改变。 然后开发者可以手动检查没有类被误删的情况。...在下面的测试中,有人从中删除了 modal-card-foot 类。 快照测试是一种检查组件样式或标记的方法。 如果快照测试通过,我们知道代码更改不会影响组件的显示。...当测试失败时,很难找出失败的原因,因为测试涵盖了太多功能。 结语 要有效地测试基于前端组件的 Web 应用程序,你需要三种类型的测试:单元测试,快照测试和 e2e 测试

1.6K80

Jest单元测试之旅—实践总结

Jest本身支持产出代码测试的覆盖率,覆盖率则是评判单测的好坏途径之一(并不是唯一,再次提及我们不能为了单测单测)。...resolves/rejects:Jest会等待异步函数执行完毕该方法应该和async/await配合使用 手动调用done:我们没有调用done之前,当前测试不会结束,直至调用done方法,有点类似回调...这是因为Jest默认的超时时间为5秒,但是我们进行测试不会真的等那么久,这时候Jest就提供了一系列工具方法解决该问题。...,是因为jest.runAllTimers会运行所有定时器,而我们需要测试的代码是不会停止的。...这意味着模块模拟不会包装原始模块,它会完全替换require系统中的原始模块。因此,mockRestore可以模拟模块中的模拟函数上定义,但是调用它不会恢复原始实现。

10.2K20

如何做前端单元测试

前言 对于现在的前端工程,一个标准完整的项目,通常情况单元测试是非常必要的。但很多时候我们只是完成了项目忽略了项目测试。...前端为什么需要单元测试? 必要性:JavaScript 缺少类型检查,编译期间无法定位到错误,单元测试可以帮助你测试多种异常情况。 正确性:测试可以验证代码的正确性,在上线前做到心里有底。...持续监听文件的修改,不需要每次修改完再重新执行测试用例 改写 package.json "scripts": { "test": "jest --watchAll" }, 效果 5....设置单元测试覆盖率阀值 个人认为既然项目中集成了单元测试,那么非常有必要关注单元测试的质量,覆盖率则一定程度上客观的反映了单测的质量,同时我们还可以通过设置单元测试阀值的方式提示用户是否达到了预期质量...但是需要注意的是:我们必须使用一个函数将被测试的函数做一个包装,正如下面 getIntArrayWrapFn 所做的那样,否则会因为函数抛出错误导致该断言失败

3.2K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券