前端开发很多是界面开发,但我们可以将相对独立的逻辑和功能从整体业务逻辑中独立出来,这样就可以对它们做单元测试。使用 Karma 可以比较方便地搭建出测试环境。
安装 Karma
使用 Karma Mocha Chai(启动器、测试框架、断言库)组合。
1  | 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@*
于是继续安装 mocha chai
1  | npm install mocha chai --save-dev  | 
初始化 Karma
1  | karma init  | 
然后要回答一系列问题。
Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> mochaDo 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.
> noDo you want to capture any browsers automatically ?
Press tab to list possible options. Enter empty string to move to the next question.
> ChromeWhat 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 搞定。
1  | 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 部分。
1  | // Karma configuration  | 
启动 Karma
编写测试用例,这里是一个使用断言库 Chai,并使用它的 expect 断言风格的例子。
1  | import {getMoneyText} from "xxx/xxx.js";  | 
启动 Karma
1  | karma start  | 
关于 Mocha (Chai, expect)的入门教程可以参考:测试框架 Mocha 实例教程