博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 Karma、Mocha、Chai 搭建支持 ES6 的测试环境
阅读量:6198 次
发布时间:2019-06-21

本文共 3316 字,大约阅读时间需要 11 分钟。

写作日期

2016-09-02

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

安装 Karma

使用 Karma Mocha Chai(启动器、测试框架、断言库)组合。

npm install karma karma-mocha karma-chai --save-dev复制代码

如果 npm 版本 >=3.0,会看到如下提示:

UNMET PEER DEPENDENCY chai@

karma@1.2.0
karma-chai@0.1.0
karma-mocha@1.1.1
UNMET PEER DEPENDENCY mocha@

这是因为 npm 已经不再自动安装 peerDependencies:

于是继续安装 mocha chai

npm install mocha chai --save-dev复制代码

初始化 Karma

karma init复制代码

然后要回答一系列问题。

Which testing framework do you want to use ?

Press tab to list possible options. Enter to move to the next question.
> mocha

Do you want to use Require.js ?

This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no

Do you want to capture any browsers automatically ?

Press tab to list possible options. Enter empty string to move to the next question.
> Chrome

What is the location of your source and test files ?

You can use glob patterns, eg. "js/.js" or "test/**/Spec.js".
Enter empty string to move to the next question.
> "test/*/.spec.js"
01 09 2016 16:43:20.743:WARN [init]: There is no file matching this pattern.

>

Should any of the files included by the previous patterns be excluded ?

You can use glob patterns, eg. "*/.swp".
Enter empty string to move to the next question.
>

Do you want Karma to watch all the files and run the tests on change ?

Press tab to list possible options.
> yes

然后就可以看到 Karma 已经创建的配置文件 karma.conf.js。如果选择使用 PhantomJS,需要单独安装。

添加 ES6 支持

现在前端开发的源码一般使用了 ES6 甚至 ES7,将这个处理工作用 webpack 搞定。

npm install karma-webpack --save-dev复制代码

既然将 ES6 的处理交给 webpack,如果之前没有安装过 babel 环境,还需要安装 babel-core babel-preset-es2015 以及 babel-loader

如果出现下面的 TypeError 错误,只要在 exclude 中加入 /node_modules/ 就好了。

TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

配置文件 karma.conf.js 中,需要注意的还有 files preprocessors 以及 webpack 部分。

// Karma configurationmodule.exports = function(config) {  config.set({    // ......    files: [      'test/**/*.spec.js'    ],    preprocessors: {      'test/**/*.spec.js': ['webpack']    },    webpack: {      resolve: {        root: __dirname + "/src"      },      module: {        loaders: [{          test: /\.js$/,          exclude: [/node_modules/, __dirname + "xxx/xxx/lib"],          loader: "babel-loader",          query: {            compact: false,            presets: ["es2015"],            plugins: ["es6-promise"]          }        }]      }    },    // ......  })}复制代码

启动 Karma

编写测试用例,这里是一个使用断言库 Chai,并使用它的 expect 断言风格的例子。

import {getMoneyText} from "xxx/xxx.js";import {expect} from "chai";describe("生成价格文案", () => {  it("价格文案:积分", () => {    expect(getMoneyText({      payType: 1,      price: 100,      points: 100,    })).to.be.equal("100积分");  });  it("价格文案:人民币", () => {    expect(getMoneyText({      payType: 2,      price: 100,      points: 100,    })).to.be.equal("¥100.00");  });  it("价格文案:人民币+积分", () => {    expect(getMoneyText({      payType: 3,      price: 100,      points: 100,    })).to.be.equal("¥100.00+100积分");  });  it("价格文案:人民币+积分(多份数量)", () => {    expect(getMoneyText({      payType: 3,      number: 5,      price: 100,      points: 100,    })).to.be.equal("¥500.00+500积分");  });});复制代码

启动 Karma

karma start复制代码

关于 Mocha (Chai, expect)的入门教程可以参考:

转载地址:http://dfnca.baihongyu.com/

你可能感兴趣的文章
Python的pass语句
查看>>
inotifywait
查看>>
RIP协议
查看>>
Linux基础系列(五)Linux系统文件删除原理
查看>>
MVC5 DB FIRST
查看>>
文件与文件系统的压缩与打包
查看>>
磁盘的性能影响着mysql连接数(请使用火狐浏览器浏览本页面,否则图片不显示)...
查看>>
视野和希望的对话
查看>>
修改eclipse默认工作空间和删除工作空间
查看>>
Egret之EUI及龙骨基础
查看>>
Ubuntu16.04安装Docker 入门
查看>>
有限算法下的技术实现路线
查看>>
启动和内核管理
查看>>
用php如何快速将字符串切分成数组
查看>>
使用distribute-list配置路由选择更新
查看>>
理解Oracle在AIX平台上的内存使用
查看>>
python类的使用
查看>>
http code 返回码
查看>>
MHA高可用部署及测试 推荐
查看>>
右键菜单管理---右键管家
查看>>