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

单元测试初体验

所以我在上周进行了一下单元测试的调研,这次调研的方向是主要使用 Mocha 基于 Karma 进行包括 UI 层的单元测试。...单元测试框架 Mocha Mocha 是 JavaScript 的一种单元测试框架,既可以浏览环境下运行,也可以 Node.js 环境下运行。...当Karma启动,它也会启动放置在这个设置的每个浏览。一旦Karma关闭,它也会关闭这些浏览。...sinon.js spy 主要用来监视函数的调用情况,sinon 对待监视的函数进行 wrap 包装,因此可以通过它清楚的知道,该函数被调用过几次,传入什么参数返回什么结果,甚至是抛出的异常情况。...它拥有 spy 提供的所有功能,区别在于它会完全替换掉目标函数,而不只是记录函数的调用信息。换句话说,当使用 spy ,原函数还会继续执行,但使用 stub 就不会。

1.5K20

提高代码质量——使用Jest和Sinon给已有的代码添加单元测试

现在,我们可以使用单元测试来提高自己的代码质量。下面,我将自己使用Jest和Sinon.js配置和编写单元测试的收获的经验和踩到的坑进行总结,根据从零开始配置和编写单元测试这一条线来进行分享。...通过本文,你可以解决以下问题: Jest与Sinon.js是什么? 如何配置Jest与Sinon.js,从而编写单元测试如何解决进行单元测试遇到的常见问题?...Sinon.js的文档,有专门关于XMLHttpRequest对象的模拟的章节,在下一章,我们将会针对项目中sinon.js的使用进行简单的介绍。...编写单元测试 本章,我们会针对如何编写单元测试文件进行一个具体的讲解,其中包含: 同步函数测试 异步函数测试 HTTP测试 同时,我们会对当中使用到的Jest和Sinon.js的API会进行简单介绍...本章,我们总结了如下问题来进行介绍,希望大家再遇到相同问题能够快速解决: 如何统计Jest单元测试覆盖率 如何设置单元测试文件不使用本地的babel配置 如何设置单元测试文件使用本地的babel配置

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

前端测试驱动开发模式(TDD)快速入门

为了可以方便执行单元测试,可以加一个npm scripts,package.json的scripts中加入如下语句,表示使用mocha去执行test文件夹下的js测试: "scripts":{ "...test": "mocha test/**/*.js" } 复制代码 test建立一个js文件,文件的引入这些工具,为了连接sinon 和 chai,要使用sinon-chai const chai...) const assert = chai.assert // 从chai引出assert 复制代码 如何实施TDD 如何写一个单元测试 首先我们看一个简单的单元测试代码: describe('测试navigateTo...(badFn, 'this.commonDirectFn is not a function') // 再把包装后的函数传入throws }) 复制代码 使用sinon模拟函数 如果需要模拟一个函数...,可以用sinon去模拟,使用方法:sinon.fake(),并且课已通过这个sinon的called方法判断函数是否被执行。

2.4K20

如何模拟一个XMLHttpRequest请求用于单元测试——nise源码阅读与分析

概述 我们进行单元测试的过程,如果我们需要对一些HTTP接口进行相关的业务测试,那么我们就需要来模拟HTTP请求的发送与响应,否则我们就无法完成测试的闭环。...它是Sinon.js的一部分,用来处理HTTP相关测试问题。 该库提供了替换原生的XHR对象和Server相关的接口,但是我们本文中只介绍关于XHR部分,也就是浏览的XHR对象的替换。...,并返回一个带有restore方法的fake XHR对象构造函数 }; 我们使用时,只需调用userFakeXMLHttpRequest方法,即可将原生的XHR对象替换成nise提供的XHR对象。...测试完成后,我们再调用返回的restore方法,这样我们就恢复了原生的XHR对象。 返回的模拟HXR对象还有部分API接口可以调用,这部分我们将在下一节——nise结构中进行介绍。...而我们进行HTTP相关测试,参数是由我们传入的,因此不需要进行验证。所以我们最终需要验证的其实是callback的处理逻辑和结果。因此,我们可以通过以下一个示例来看下它如何与业务代码进行结合。

2.5K10

Vue 测试速成班

测试运行 对于新的 Vue 项目,添加测试的最简单方法是使用 Vue CLI[2]。在生成项目(执行 vue create myapp),你必须手动选择单元测试和 E2E 测试。 ?...我们必须将 sinonChai 作为一个插件添加到 Chai ,以便能够对调用签名进行断言。...但有一个问题我们仍然不能回答:应用程序可以浏览运行吗?使用 Cypress 编写的端到端测试可以告诉我们答案。...全局变量 cy 表示 Cypress 运行。我们可以同步地命令运行程序浏览执行什么操作。 访问了主页(visit)之后,我们可以通过 CSS 选择访问页面的 HTML。...总结 我们已经介绍完了所有的测试用例,从一个函数的基本单元测试实际浏览运行的端到端测试。

2.7K10

对 React 组件进行单元测试

单元测试软件开发过程进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 测试框架 测试框架的作用是提供一些方便的语法来描述测试用例,以及对用例进行分组。...', function() { ... }); ... }); spy 正如 spy 字面的意思一样,我们用这种“间谍”来“监视”函数的调用情况 通过对监视的函数进行包装,可以通过它清楚的知道该函数被调用过几次...好的做法是使用stub 对它进行隔离替换。这样就实现了更准确的单元测试。...一般使用 Enzyme 的 mount 或 shallow 方法,将目标组件转化为一个 ReactWrapper对象,并在测试调用其各种方法: import Enzyme,{ mount } from...明确指定 PropTypes 对于一些之前定义并不清晰的组件,可以统一引入 prop-types,明确组件可接收的props;一方面可以开发/编译过程随时发现错误,另外也可以团队其他成员引用组件形成一个明晰的列表

4.2K40

12 款 JavaScript 代码测试必备工具

QUnit QUnit 是个功能强大又易于使用的 JavaScript 单元测试框架。...它不依赖任何东西,可以配合任何单元测试框架工作。 06. Karma Karma 是针对连通浏览的一个框架无关测试运行。...集成的 TestRunner 同样允许你以同步的方式调用异步命令,这样你不需要关心如何处理 Promise 以避免竞态条件。...针对 PhantomJS, CasperJS 和 PhantomCSS 的 NodeJS 包装—— PhantomFlow 能够流畅地代码描述用户流程,同时生成用于可视化的结构化树数据。...它是通过下面方式实现的:运行测试套件,获取 DOM 快照并上传到 Percy 服务,最终浏览渲染之。 —————END————— 看完本文有意思?请分享给更多人 小伙伴们,你怎么看

2.2K100

使用mocha编写node服务单元测试

nyc nyc用于统计我们的单测代码测试覆盖率,使用起来也很简单:测试脚本前加上nyc即可。...babel进行编译: mocha --require @babel/register 如果觉得命令行参数太多太长,mocha允许我们使用配置文件的方式来进行传参: module.exports = {...而测试用例如何来判断函数是否正常执行呢?这时候就要用到断言了。 chai断言库 mocha可以搭配你喜欢的任何断言库,经常使用到的有chai断言库。...当我们的异步逻辑耗时较长,需要手动地调整这个超时时间。 我们可以mocha启动传入timeout参数,或者测试用例显示声明该测试用例的超时时间。...例如当我们需要对一个删除数据的接口进行测试,我们不能真的去执行数据库删除操作来判断函数是否正常执行。这时候就需要引入sinon来帮助我们替换掉这些难以模拟的逻辑。

3.9K20

【Web技术】639- Web前端单元测试到底要怎么写?

我们看到的大多数教程都会讲单元测试的重要性、一些有代表性的测试框架 api 怎么使用,但在实际项目中单元测试要怎么下手?测试用例应该包含哪些具体内容呢?...我们写测试用例尽量保持用例的单一职责,不要覆盖太多不同的业务范围。测试用例数量可以有很多个,但每个都不应该很复杂。...其实就是字面量对象! 我们可以用在业务代码同样的方式来产生这些字面量对象,对于字面量对象的断言就非常简单了,并且没有直接调用 api 层,就用不着做 mock 咯!...年,参加于丹佛举行的敏捷大会,Elisabeth Hedrickson 递给我一条类似 Lance Armstrong 热销的那种绿色腕带。...写代码,我用余光瞟见它。它一直提醒我,我做了写出整洁代码的承诺。

3K30

实例入门 Vue.js 单元测试

本文作为《对 React 组件进行单元测试》一文的姊妹篇,将照猫画虎式的尝试面对初学和向中级进阶的开发者,对单元测试 Vue.js 技术栈 的应用做出入门介绍。 I....单元测试软件开发过程进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。...端到端(浏览等真实场景走通功能而把程序当成黑盒子的测试)与集成测试(集合多个测试过的单元一起测试)的反馈与修复的周期比较长、运行速度慢,测试运行不稳定,由于很多时候还要靠人工手动进行,维护成本也很高...', function() { ... }); ... }); 1.6 spy 正如 spy 字面的意思一样,我们用这种“间谍”来“监视”函数的调用情况 通过对监视的函数进行包装,...一般使用其 mount() 或 shallowMount() 方法,将目标组件转化为一个 Wrapper 对象,并在测试调用其各种方法,例如: import { mount } from '@vue/

2.8K20

分享7个专业级的JavaScript测试库,提高你的工作效率

2、Sinon 这是一个独立的库,用于JavaScript测试创建测试替身(侦查、桩和模拟)。它通过提供工具来验证函数调用、控制行为等,帮助你编写隔离的测试。...我们首先调用device.reloadReactNative()来确保每个测试用例开始应用都是一个新的状态。...Node.js环境,你可以使用npm(Node包管理)来安装: npm install --save-dev testdouble 接下来,你可以在你的单元测试使用TestDouble。...'hello') ,它将返回 'world' console.log(mockFunction('hello')); // 输出: 'world' 你也可以使用TestDouble来模拟对象,例如使用...', 'method2']); // 使模拟对象的方法调用时返回特定的值 td.when(mockObject.method1()).thenReturn('hello'); // 现在,当你调用

22520

用 jest 单元测试改善老旧的 Backbone.js 项目

对于这样的既有项目,之前的文章进行过分析,常常面临依赖不清、封装混乱,以及缺乏测试等问题;对之进行维护和新需求开发,结合其本身特点, TDD 的方式下进行渐进的改善,而非推倒重来,无疑是个可行的办法...'npm.cmd' : 'npm', args: ['test'] } }, 这样之后的 build 任务,一旦有单元测试未通过,整个流程将停止执行。...url 前缀 可以发现 model 依赖了以个全局变量的属性 _appFacade.ajaxPrefix 首先编写一个假的全局对象: // __test__/fakeAppFacade.jsvar...Backbone 的请求,包括 Backbone.sync / model.fetch() 等, 本质上还是调用的 jQuery 的 $.ajax 方法(默认情况下),也就是传统的 xhr 方式,使用...Backbone.View 视图组件经过 ES6 升级和合理封装后,可以明显改善页面的整洁度,并顺利应用于单元测试 可以用 sinon.createFakeServer() 拦截 Backbone.Model

3.4K10

前端自动化测试工具 overview

,基本上目前前端单元测试就在这两个库之间选了,下面是这两个库的区别,大家可以根据自己的需求进行选择: mocha: 优点: 终端显示友好 灵活,扩展性好 缺点: 自身集成度不高(没有断言,spy,...两者功能覆盖范围粗略可以表示为: Jasmine(2.x) === Mocha + Chai + Sinon - mockserver PS: 个人实际使用后觉得Chai和Sinon毕竟是专门做特定功能的框架...Phantomjs && Slimerjs 这两个框架一样,都是提供了无界面的真实浏览测试环境,可以让你在node对真实浏览的dom进行操作和测试,不同的就是Phantomjs基于webkit(...当我们有需要在真实浏览环境测试可以考虑这两个框架 测试任务管理工具 Karma ?...Phantomjs等无头浏览环境 可控制自动化测试流程,比如编辑保存自动全部全部测试用例 强大适配器,可以karma上面配置jasmine,mocha等单元测试框架。

2.2K110

前端自动化测试工具 overview

,基本上目前前端单元测试就在这两个库之间选了,下面是这两个库的区别,大家可以根据自己的需求进行选择: mocha: 优点: 终端显示友好 灵活,扩展性好 缺点: 自身集成度不高(没有断言,spy,...两者功能覆盖范围粗略可以表示为: Jasmine(2.x) === Mocha + Chai + Sinon - mockserver PS: 个人实际使用后觉得Chai和Sinon毕竟是专门做特定功能的框架...Phantomjs && Slimerjs 这两个框架一样,都是提供了无界面的真实浏览测试环境,可以让你在node对真实浏览的dom进行操作和测试,不同的就是Phantomjs基于webkit(...当我们有需要在真实浏览环境测试可以考虑这两个框架 测试任务管理工具 Karma ?...Phantomjs等无头浏览环境 可控制自动化测试流程,比如编辑保存自动全部全部测试用例 强大适配器,可以karma上面配置jasmine,mocha等单元测试框架。

1.3K10

使用Enzyme测试React(Native)组件|洞见

组件化与UI测试 组件化出现之前,我们不谈UI的单元测试,哪怕是对于UI页面进行测试都是一件非常困难的事情。...浅渲染(Shallow Rendering)解决了这个问题,也就是说我们针对某个上层组件进行测试,可以不用渲染它的子组件,所以就不用再担心子组件的表现和行为,这样就可以只对特定组件的逻辑及其渲染输出进行测试了...完全的DOM渲染需要在全局范围内提供完整的DOM API,这也就意味着它必须在至少“看起来像”浏览环境的环境运行,如果不想在浏览运行测试,推荐使用mount的方法是依赖于一个名为jsdom的库,...它本质上是一个完全JavaScript实现的headless浏览。...前面我们所谈论的都是如何测试使用react-dom所构建的React组件,即最终渲染的结果是浏览当中的DOM结构,但对于React Native来说,JavaScript代码最终会被编译并用于调用iOS

2.3K40

Vue2的单元测试与调试技术

测试是一个非常美妙的世界,一旦进入根本停不下来~Java,我们可以使用JUnit做单元测试,但在前端开发,想做单元测试并不是一件特别容易的事情,但如果你采用angularjs,react或Vue这类的前端技术...的单元测试与调试技术; 利用Vue-cli的webpack方式,提示使用哪种技术做单元测试,选择karma即可,单元测试文件都被放在工程的test/unit/specs目录下,每个测试文件以*.spec.js...结尾,最简单测试一个我们的Label标签是否能被正确显示: 注:特别注意,如果您的项目中使用了Less,那么做单元测试是无法识别Less变量的,所以应该剔除掉这些文件,方法是unit/index.js...sinonsinon将测试替身分为3种类型: Spies:模拟一个函数实现,检测函数调用的信息; Stubs:与Spies类似,但完全替换目标函数; Mocks:通过组合Spies和Stubs,使替换一个完整对象更容易...哦,当组件有异步操作,比如data重新设置值,我们应该使用Vue.nextTick函数回调函数处理expect,当处理事件,我们可以找到对应的dom节点,然后向浏览发出event指令来模拟,比如通过

1.2K100

2021 年 Node.js 开发人员学习路线图

Node.js 基础知识 事件发射(Event Emitter):做为 Node.js 对象,Event Emitter 操作执行完成后发送消息,触发特定的事件。...缓      存 注意:缓存使用内存存储文件拷贝,降低网络调用,提供更快的网络响应。 内存缓存 该技术大多数情况下使用服务的内存,因此通常称为内存缓存。...该技术尤其适用于大规模数据和大量网络调用的情况,通过群集中添加更多的服务实现缓存容量的增量扩展和扩容。Redis 是目前最广为使用的 分布式内存,推荐进一步了解 Memcached。...REST 架构使用基本 HTTP 调用进行通信,避免了使用 COBRA、COM +,RPC 等复杂方式通信。 REST 调用是基于消息的,依赖 HTTP 标准描述消息。...推荐阅读:下面资料分别介绍了如何使用 Sinon 和 Jasmine 实现 Mocking 测试: Sinon https://stackabuse.com/using-mocks-for-testing-in-javascript-with-sinon-js

2.3K20

React 16 - 生态:UI 库、Next.js、测试、开发调试工具

Material UI 样式更加美观,适合 2C 场景 # 选择因素 组件库是否齐全 样式风格是否符合企业业务需求 API 设计是否便捷灵活 技术支持是否完善 开发是否活跃 # Next.js # 同构应用 服务端执行虚拟...opens new window) 创建页面 页面就是 pages 目录下的一个组件 static 目录映射静态文件 page 具有特殊静态方法 getInitialProps,用于获取页面初始化数据 页面中使用其他...React 组件 页面也是标准的 node 模块,可以使用其他 React 组件 页面会针对性打包,仅包含其引入的组件 使用 Link 实现同构路由 使用 next/link 定义链接 点击链接页面不会刷新...React 让前端单元测试变得容易 React 应用很少需要访问浏览 API 虚拟 DOM 可以 Node.js 环境运行和测试 Redux 隔离了状态管理,可以进行纯数据层单元测试 # 相关工具...Jest:单元测试框架 JS DOM:浏览环境的 Node.js 模拟 Enzyme:React 组件渲染和测试 nock:模拟 HTTP 请求 sinon:函数模拟和调用跟踪 istanbul:单元测试覆盖率

1.5K30

2021年Node.js开发人员学习路线图

Node.js 基础知识 事件发射(Event Emitter):做为 Node.js 对象,Event Emitter 操作执行完成后发送消息,触发特定的事件。...缓 存 注意:缓存使用内存存储文件拷贝,降低网络调用,提供更快的网络响应。 内存缓存 该技术大多数情况下使用服务的内存,因此通常称为内存缓存。...该技术尤其适用于大规模数据和大量网络调用的情况,通过群集中添加更多的服务实现缓存容量的增量扩展和扩容。Redis 是目前最广为使用的 分布式内存,推荐进一步了解 Memcached。 ?...REST 架构使用基本 HTTP 调用进行通信,避免了使用 COBRA、COM +,RPC 等复杂方式通信。 REST 调用是基于消息的,依赖 HTTP 标准描述消息。...推荐阅读: 下面资料分别介绍了如何使用 Sinon 和 Jasmine 实现 Mocking 测试: Sinon https://stackabuse.com/using-mocks-for-testing-in-javascript-with-sinon-js

2.6K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券