转载自楼主个人博客 Mocha 和 Chai 入门初探

Chai

在和 jest 作比较的时候, 两者主要的不同就是 jest 的集成度比较高内置断言库, 而 mocha 需要搭配额外的断言库, 在此选择了比较流行的 chai 作为断言库.

风格的选择

其中 chai 又有好几种断言风格, 我们经常见到的其实就是 BDD 风格的 should / expect.

其中我较喜欢 should, 因为它可以直接以属性的方式嵌入所有内置原生对象, 所以可以很方便的以 variable.should.equal(someValue) 的形式来书写断言, 和 expect 相比较可以省略一对 () ... 如果是 expect 风格的话, 上述示例代码等价于 expect(variable).to.equal(someValue). 在一般情况下两者的使用时几乎相同的, expect 作为断言的开始, should 接在想要断言的变量之后. 但是有一些地方 should 就需要变换一下我上述所说的写法了.

Should

should 实际上是给所有的对象都扩充了一个 getter 属性 should, 如果你想在浏览器中运行测试的话, should 在 IE 浏览器中会有一些问题. 正是因为 should 是扩充了 Object.prototype, 所以如果变量的值为 nullundefined 的时候, 是无法使用 .should.equal() 的形式的, 因为 null, undefined 的原型不是 Object,所以should 不存在. 所以此时应当如下所示使用.

const sould = require('chai').should();...should.not.exist.(variable); // variable 的值不应该是 null 或者 undefined

Mocha

现在我们来看看如何对 mocha 进行配置以及上手的步骤. 我假定在 mocha 中写测试的时候也同样需要使用 ES6 语法, 还有一个关注点是如果我在 webpack.config.js 中已经设置了 alias, 那么在写测试代码的时候, 我希望导入的文件也可以使用 alias 来保持我路径的一致性以及与此同时带来的便利性.

配置

下载依赖

npm install --save-dev mocha chai

接下来只要在项目根目录下新建文件夹 test, 在里面写的测试文件以 *.test.js 命名, 接下来在 packag.json 文件中 配置 npm test 命令.

"npm test": "./node_modules/.bin/mocha"

还可以在 test 根目录下新建一个配置文件 mocha.opts, 其中配置的选项相当于给 mocha 命令加入了命令行参数.

--recursive
--ui bdd

具体的配置请参照文档 Mocha - USAGE.

之后在终端输入 npm run test 即可运行测试.

支持 ES6

上述只是配置好了基本的运行环境, 如果需要支持 ES6 的话, 那么还需要两个简单的步骤.

npm install --save-dev babel-register

然后修改 mocha.opts

--recursive
--ui bdd
--require babel-register

完成, 现在已经支持 ES6 语法了.

支持 Webpack 的 Alias

如果不需要请跳过此步骤, 需要的推荐一个本人基于一个开源库修改的 babel 插件 babel-plugin-webpack-alias-resolve.

写测试

直接上代码! 有一个对 axios 经过封装的 ajax 函数, 我现在对其进行测试. 下面是代码在 Gist 的地址 the test for ajax which based on axios

结束

写的很少 ... 正在实践当中, 其实测试上述那个文件的时候我已经踩了一些坑了, 但是写出来还是不够多, 等踩多了总结一下踩过的那些.

Mocha 和 Chai 入门初探相关推荐

  1. 使用 Karma、Mocha、Chai 搭建支持 ES6 的测试环境

    写作日期 2016-09-02 前端开发很多是界面开发,但我们可以将相对独立的逻辑和功能从整体业务逻辑中独立出来,这样就可以对它们做单元测试.使用 Karma 可以比较方便地搭建出测试环境. 安装 K ...

  2. react项目中使用mocha结合chai断言库进行单元测试

    react项目中使用mocha结合chai断言库进行单元测试 git地址:https://github.com/yancekang/... 如果对你有所帮助,感谢start 项目搭建 create-r ...

  3. node mocha_使用Mocha和Chai测试Node RESTful API

    node mocha 介绍 ( Introduction ) I still remember the satisfaction of being finally able to write the ...

  4. 深度学习入门初探——损失函数均方误差

    前文已经介绍了损失函数的目的是做什么了的: 深度学习入门初探--引出损失函数https://www.toutiao.com/i7033404064663126560/?group_id=7033404 ...

  5. canvas入门初探—实现人物移动动画

    前言 之前两篇文章讲了一些canvas基础入门的知识点和一下小案例如下: Canvas初探入门- 基础图形的绘制 Canvas初探入门-实现鼠标画板 这一篇通过案例实现人物移动动画,下面一起来看看 实 ...

  6. Karma、Mocha和Chai自动化测试解决方案

    一.背景 随着平台功能越来越多,接口及关联数据复杂,传统功能测试无法满足覆盖测试要求,顾搭建针对TypeScript的自动化单元测试. 该测试体系具有以下优点: 缩短测试时间:通过自动化测试体系,可以 ...

  7. 前端js单元测试 使用mocha、chai、sinon,karma

    karma(因果报应)  提供在浏览器上测试  可以同时跑在多个浏览器下 mocha测试框架  其他测试框架还有Jasmine chai断言库  expect = chai.expect sinon ...

  8. scala学习笔记(一)入门初探

    2019独角兽企业重金招聘Python工程师标准>>> 1. 值和变量 val answer = 8 * 5 + 2 //定义值,不可改变,鼓励定义值少定义变量var counter ...

  9. Dubbo + Zookeeper入门初探

    2018年2月15日,阿里巴巴的dubbo进入了Apache孵化器,社区的加入,希望dubbo能变得更好-Registry:注册中心,相当于房产中介,服务提供者和使用者都需要在这里注册/使用服务, 我 ...

最新文章

  1. java c3p0 连接 mysql_Java使用C3P0数据源链接数据库
  2. 从首页问答标题到问答详情页
  3. webrtc rtsp播放
  4. 为什么文件会自动恢复成旧文件? -- windows server 2003
  5. Smalidea无源码调试 android 应用
  6. 解决Android Studio编译后安装apk报错:Error while Installing APK
  7. kde下sudo出现cannot connect to xserver解决方法
  8. 服务器维护 测试化验加工费,测试化验加工费.PPT
  9. python开发跟淘宝有关联微_Python_淘宝用户行为分析
  10. 集合php,php function集合
  11. python新手入门基础操作谨记这5点_Python大牛指点新手之:掌握这5点,可以快速从入门到进阶!...
  12. 【操作系统/OS笔记18】虚拟文件系统概念
  13. Unity手游开发与实战
  14. centos6.5 mysql登陆_centos6.5下mysql无法登陆的问题
  15. echarts echarts.js:440 Uncaught TypeError: Cannot read properties of null (reading ‘toFixed‘)
  16. JAVA Eclipse如何安装Swing
  17. Docker引擎客户端工具docker的总结
  18. 韩立刚计算机网络——第七章:Internet 上面的音频和视频
  19. Android-MTK系统- 系统常用修改点
  20. ios服务器停止响应怎么办,iPhone 应用停止响应或意外关闭怎么办

热门文章

  1. linux s t i a权限,关于Linux下s、t、i、a权限
  2. 数组精选题目三连(5)
  3. Win10 连接 Ubuntu16.04.3(通过Xdrp连接xfce4界面)
  4. 深度学习(04)-- 典型CNN结构(LeNet5 ,AlexNet)
  5. 剑指offer_05
  6. 《Python Cookbook 3rd》笔记(3.1):数字的四舍五入
  7. C++primer第九章 顺序容器 9.3 顺序容器操作
  8. C++学习笔记 简单部分
  9. 算法入门篇三 详解桶排序和整理排序知识 堆的相关操作 补充 不完整
  10. c++面向对象高级编程 学习八 non-explicit-one-argement-ctor