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

【干货分享】微信小程序单元测试攻略

总体来说,单元测试有以下一些好处: 1,及早发现代码错误,提高代码质量和可维护性。 2,代码变更时可以快速进行检查。 然而要做好测试也有一定的困难: 1,花费时间长。...2,被测代码包含复杂的环境因素需要处理或模拟,例如使用了storage、调用了接口、使用了环境变量等。 (图片来源:码农翻身公众号) 但无论如何,有价值的东西就应该去做,不应该知难而退嘛。...script: { "test": "jest --coverage" } ...} 2.2.3 添加jest.config.js: 注意testEnvironment设为 '...该方法和sinon.spy一样,生成函数的“间谍”,可以断言该函数的已调用次数、调用入参、调用返回等是否符合预期。...axios.get('/api').then(res => res.data)} // 测试代码B import axios from 'axios';jest.mock('axios'); // 模拟一次接收到的数据

2.8K40

万字详文:彻底搞懂 Jest 单元测试框架

对于这两种情况,你可以通过将测试视为:检查该函数是否产生预期结果。最典型的测试流程如下所示: 导入要测试的函数 给函数一个输入 定义期望的输出 检查函数是否产生预期的输出 一般,就这么简单。...,当结果和预期不相等,抛出错误即可: const expect = (actual) => ({ toBe(expected) { if (actual !...模拟 在复杂的测试场景,我们一定绕不开一个 Jest 术语:模拟(mock) 在 Jest 文档中,我们可以找到 Jest 对模拟有以下描述:”模拟函数通过抹去函数的实际实现、捕获对函数的调用,以及在这些调用中传递的参数...), }); 这是一个简单模拟的示例,模拟了 fs 模块 readFile 函数在测试特定业务逻辑的返回值。.../packages/jest-cli/bin/jest.js /path/test.spec.js 就会执行 jest.js 文件,然后进入到 build/cli 文件中的 run 方法,run 方法会对命令中各种的参数做解析

7.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React 设计模式 0x8:测试

    有两种方法可以实现这一点,包括以下内容: 功能测试 渲染测试 # 功能测试 功能测试是一种测试,用于验证函数按预期工作,这个测试通常根据被测试的函数的预期结果进行断言。....test.js 或 .spec.js 结尾。...# 使用 Jest 进行集成测试 在大多数 React 应用程序中,通常需要与外部 API 集成以在应用程序中发布和获取数据。 可以使用 Jest 来测试 API 行为,以查看预期和意外结果。...在 Jest 中有以下三种类型的模拟函数: Jest.fn(用于模拟单个函数) Jest.mock(用于模拟整个模块) Jest.spyOn(用于查看函数的调用情况) 更多信息请访问 https://jestjs.io...React 组件的工具和函数 编写测试用例 编写完整的测试用例,覆盖组件的所有代码路径,包括正常情况和异常情况 使用快照测试 使用 Jest 中的快照测试功能来验证组件是否按预期呈现 使用模拟数据

    1.8K10

    Jest测试语法系列之Expect

    pass指示是否存在匹配,message提供了一个没有参数的函数,在失败时返回错误消息。因此当pass为false时,当expect(x). yourmatcher()失败时,消息应该返回错误消息。...例如,如果你想检查一个模拟函数是否被调用时带有一个数字。...,该数组包含预期数组中的所有元素,也就是说预期数组是接收数组的子集,因此它匹配一个接收到的数组,该数组包含不属于预期数组的元素。...它将把接收到的对象与预期对象中没有的属性匹配起来。...您还可以传递一个对象数组,在这种情况下,只有当接收到的数组中的每个对象(在上面描述的番茄对象意义中)与预期数组中的相应对象相匹配时,该方法才会返回true。

    3.7K20

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

    虽然从错误信息中我们知道可以通过jest.setTimeout来修改这个默认超时时间,但这个测试用例在实际运行的时候也的确需要等待6s,如果我们有什么测试用例需要等待几分钟甚至几小时,那总不能在CI上卡个几小时等待用例通过吧...这样一来,这个测试用例的表现就不符合预期了,我们的runAllTicks应该能够把catch回调执行完毕才对。...在我们调用完enqueueJob之后,我们通过对setTimeout的mock数据进行断言,来检查enqueueJob是否调用了setTimeout并传入了预期的时长。...断言通过后,我们再手动调用传入的回调函数来模拟6s已经经过的场景。...结语 之前精力都在业务代码的编写,很少接触到JS事件队列的知识,这次编写测试用例时遇到的问题让我有机会了解了JS事件队列里的基本概念和原理,还是收获很大的。

    6.9K60

    干货 | 携程租车React Native单元测试实践

    "redux-mock-store": "^1.5.3" //Redux测试模拟store } 根目录下添加jest.config.js文件作为配置文件: module.exports.../jest.setup.js'], //运行测试前需运行的初始化文件,例子在下方 moduleNameMapper: { //需要模拟的静态资源 '\\....比如之前提到的初始化文件jest.setup.js中,我们会mock一些对象: jest.useFakeTimers(); //mock时间 jest.mock('....七、Jest 异步测试 Jest单元测试是同步的,因此面对异步操作如fetch获取数据,需要进行异步的模拟测试。...; 通过单元测试,给项目带来了不少好处: 通过单元测试可以确保代码得到预期的结果,在测试环境中就发现bug; 当修改依赖的组件时,能在测试中发现被影响组件的错误,这样可以支持我们更好的重构代码,有利于项目的长期迭代

    6.1K30

    JavaScript 测试教程 part 1:用 Jest 进行单元测试

    JavaScript测试教程–part 4:模拟 API 调用和模拟 React 组件交互 有多种不同种类的测试,我会首先解释其中的一部分。...被测试的单元可以是函数、模块和类等。单元测试应该相互隔离并且彼此独立。对于给定的输入,用单元测试检查结果,通过尽早发现问题并避免退化,可以帮助你确保程序的每个部分都能按预期工作。...他们将模拟滚动,单击和键入之类的行为,并从实际用户的角度检查我们的程序是否运行良好。 用 Jest 进行单元测试 Jest 是 Facebook 开发的测试框架。...package.json 1"scripts": { 2 "test": "jest" 3} 为了简单起见,我在这里将 Jest 与简单的纯 Node.js 模块一起使用(不包括 webpack)。...如果出现问题,除了使代码更具可读性之外,它还有助于提供更友好的错误消息。

    2.9K20

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

    在这篇教程中,我们将学习如何测试更复杂的组件,包括用 Mock 去编写涉及外部 API 的测试,以及通过 Enzyme 来轻松模拟组件交互 初次尝试 Jest Mock 我们的应用程序通常需要从外部的...这是我们几次提到的ShallowWrapper的功能。我们用它来模拟事件。...由于没有发起实际的 post 请求,我们的测试可以更可靠,更快。除此之外,我们还在整个 React 组件中模拟了事件。我们检查了它是否产生了预期的结果,例如组件的请求或状态变化。...让我们开始测试它是否不会引发任何错误,我们创建 useModalManagement.test.js // src/useModalManagement.test.js import useModalManagement...我们可以通过阅读错误消息找出原因: 无效的 Hooks 调用, Hooks 只能在函数式组件的函数体内部调用。

    4.8K20

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

    taskProps.name).toBe(matchingTask.name); }) }) }); }); 通过上面的测试代码,我们可以确定 Task 组件从 ToDoList 收到了正确的...因此,之前失败的测试现在就会通过。 由于 mount 函数会模拟实际的 DOM,渲染成本更高,因此运行测试会花费更多的时间。...在测试与 DOM 的交互或者在处理高阶组件时,mount 函数也可以派上用场。_Mount 使用 DOM 实现的模拟,Jest 默认使用的是 jsdom。...除此之外,我们还介绍了 Jest 快照测试,这是一个非常强大的工具,可以追踪组件渲染方式的变化。在接下来的文章中,我们还将介绍测试中常见的 Mock 技巧——与组件的模拟交互,不见不散!...- END - ● JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件● 你不知道的 Npm(Node.js 进阶必备好文)● 用动画和实战打开 React

    2.1K20

    浅谈前端测试

    这里不赘述 node 环境   推荐测试框架 jest   jest 是 FB 的杰作之一,方便各种场景的 js 代码测试,这里选择 jest 是因为确实方便   使用方法及配置信息可以去官方文档   ...,我们的关注点应该在于读取文件错误时能否及时抛出异常,以及 console.log() 是否如预期执行   对应到测试 const getFile = require('....方法使得测试达到我们预期的目的,在这个简单的场景里面我们只需要模拟返回值就好   2.expect(console.log) 这里会报错,因为 jest 断言的内容只能是 mock function...()  })   每次执行 test 前先清除 mock,避免多个测试用例之间复杂化 mock 导致错误   小结:单元测试中的 mock 是个测试思路,我们无需关心外部文件和依赖是什么,只要能模拟出正确的情况程序是否按规则执行...,错误的情况程序是否有异常处理,逻辑是否正确等。

    1.7K10

    JavaScript测试教程–part 4:模拟 API 调用和模拟 React 组件交互

    此类模拟文件在 _ mocks _ 目录中定义,在该目录中,文件名被视为模拟模块的名称。...Node 的某些核心模块(例如 fs 或 path ),则需要在模拟文件中明确调用 jest.mock('moduleName') Jest 允许我们对函数进行监视:接下来测试是否调用了我们所创建的...('axios'),Jest 在的测试和组件中都用我们的模拟代替了 axios。...从测试中返回 promise 是能够确保 Jest 等待其解决的一种方法。 总结 在本文中,我们介绍了模拟模块,并将其用于伪造 API 调用。由于没有发出实际的请求要求,我们的测试可以更可靠、更快。...除此之外,我们还在整个 React 组件中模拟了事件,并检查了它是否产生了预期的结果,例如组件的请求或状态变化,并且了解了监视的概念。 1.

    3.7K10

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

    导致该错误的原因是因为我们在使用runOnlyPendingTimers时,把定时器执行到了setTimeout内部,但是内部的执行代码是Promise.then,它是一个微任务,微任务会被推到事件队列中...,js会先执行其他任务(expect),再执行微任务,这样导致我们的fn断言时并没有被调用。...每个方法都有不同的使用场景,每个API都会生成一个mock模拟函数,Jest对模拟函数提供了很多方法给予我们模拟方法的返回、实现等等,可移至文档参考 jest.fn jest.fn主要是创建一个模拟函数...模拟部分函数,这里使用了jest.requireActual,该方法主要是绕过模拟模块导出真实模块,然后通过jest.mock的工厂函数重新去定义该模拟模块的内容,这种方式就可以指定导出的模块具体哪些方法需要被模拟...这里我们通过js中Object.defineProperty来修改window中bridage的属性,从而达到模拟的效果。

    10.3K20

    JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件

    通过及早发现问题并避免 bug 回归,它可以帮助我们确保代码的各个部分按预期工作。 集成测试 即使所有单元测试都通过了,我们的应用仍然可能会崩溃。...E2E 测试的重点是在我们正在运行的应用程序中模拟实际用户(例如模拟滚动、单击和键入等行为),并检查我们的应用程序是否从实际用户的角度运行良好。...除了使代码更具可读性之外,它还有助于在出现错误时提供更好的错误消息。...如果这里我们将第一条测试用例改为 expect(typeof Math.random()).toEqual('string') ,那么再运行 npx jest ,就会出现如下错误信息: FAIL ....我们通过 npm 来安装 jest-enzyme: npm install jest-enzyme 相应地在 src/setupTests.js 中添加相应的配置: // src/setupTests.js

    3K10

    Jest 是一款优雅、简洁的 JavaScript 测试框架

    为什么使用jest? Jest 是一款保障代码正确的 JavaScript 测试框架,提供开发者熟悉且功能完善的接口来快速完成测试。 Jest 文档齐全,仅需极少的配置就可满足您的需求。...用法 使用 yarn 安装 Jest︰ yarn add --dev jest 或使用 npm: npm install --save-dev jest 示例 首先,创建 sum.js 文件︰ function...sum(a, b) { return a + b } module.exports = sum 创建名为 sum.test.js 的文件: const sum = require('..../sum.test.js ✓ adds 1 + 2 to equal 3 (5ms) 此测试使用 expect 和 toBe 来测试两值是否一致。...匹配器的使用 expect: 返回了一个"预期"的对象 .toBe(4) 是匹配器, 当 Jest 运行时,它会跟踪所有失败的匹配器,以便它可以为你打印出很好的错误消息。

    59710

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

    因此单元测试的概念在前端领域应运而生,通过编写单元测试可以确保得到预期的结果,提高代码的可读性,如果依赖的组件有修改,受影响的组件也能在测试中及时发现错误。 测试类型又有哪些呢?...Jest特点: 零配置 快照 隔离 优秀的 api 快速且安全 代码覆盖率 轻松模拟 优秀的报错信息 Enzyme Enzyme是Airbnb开源的React测试工具库,提供了一套简洁强大的API,并内置...transform: 设置哪些文件中的代码是需要被相应的转译器转换成 Jest 能识别的代码,Jest 默认是能识别 JS 代码的,其他语言,例如 Typescript、CSS 等都需要被转译。...jest.mock('axios'),我们让jest去对axios做模拟,这样就不会去请求真正的数据了。...这种方式就不用去模拟axios,而是直接走的本地的模拟方法,也是比较常用的一种方式,这里就不展开说明了。

    5K20

    单元测试

    代码信心的体现 测试可以确保得到预期的结果 作为现有代码行为的描述 促使开发者写可测试的代码,可测试的代码可读性会更高 如果依赖的组件有修改,受影响的组件能在测试中发现错误 测试内容 什么是细节?...cnpm包目录下执行 npx jest4r setup4package 这将完成以下工作 配置cnpm包下的 jest.config.js 文件 添加测试脚本到 cnpm包下的 package.json...文件,如果存在prettier配置文件,文件名需要保持一致(文件名规则对齐V6工程命名规则) 安装单测环境依赖包 配置jest.config.js @liepin/js-jest4r-fe 提供的默认配置如下...jest-location-mock 用于在 Jest 测试中模拟浏览器window.location对象的库。...(已默认引入,不需要手动再次引入) jest-canvas-mock 用于在测试环境中模拟 HTML5 Canvas。

    31310

    React Native自动化测试

    我们期待你能帮助我们提高测试覆盖率,以及提供更多的测试代码或是测试用例。 使用Jest来测试 Jest是在命令行通过node来执行的纯js测试工具。测试代码放置在__tests__目录下。...有一些功能我们还没有完成模拟(jest中需要模拟一些接口),因而没有纳入测试,以避免测试不通过和提高测试速度,但我们正在尽最大努力去逐渐补完这些功能的模拟。...注意:要运行你自己的测试代码,请首先去jest的官网阅读指导文档,然后在package.json中加入jest对象,在其中包含一些预备测试环境的脚本。下面是一个示例: ......测试错误条件也是可行的,使用runTest:module:initialProps:expectErrorRegex:或是runTest:module:initialProps:expectErrorBlock...:方法,它们会按提供的条件去验证抛出的错误是否符合。

    3K60

    如何做前端单元测试

    必要性:JavaScript 缺少类型检查,编译期间无法定位到错误,单元测试可以帮助你测试多种异常情况。 正确性:测试可以验证代码的正确性,在上线前做到心里有底。...1.安装依赖 npm install --save-dev jest 2.简单的例子 首先,创建一个 sum.js 文件 ....设置单元测试覆盖率阀值 个人认为既然在项目中集成了单元测试,那么非常有必要关注单元测试的质量,而覆盖率则一定程度上客观的反映了单测的质量,同时我们还可以通过设置单元测试阀值的方式提示用户是否达到了预期质量....toHaveLength 可以很方便的用来测试字符串和数组类型的长度是否满足预期 ....,否则会因为函数抛出错误导致该断言失败。

    3.3K20
    领券