-
Notifications
You must be signed in to change notification settings - Fork 2
KAB
KAB 集成了 Jasmine
与 istanbul
作为 BDD 与 Coverage 的测试。
使用浏览器作 BDD 测试时,需要满足以下条件:
- 项目根目录下包含
test
目录。 -
test
目录下有配置文件config.js
。
而 init
命令正是用于自动化处理创建 test
与 test/config.js
的。
$ kab init
如果目标文件已存在,会询问用户是否覆盖。目前配置文件兼容 Karma
的大部分配置项,但是不会安装它指定的任何 plugins。
在按照 Jasmine
的指引编写好 Spec
后,置于 test
目录下(建议与待测源码目录结构类似建立子目录),保证配置文件中的 files
的 pattern 能匹配到该文件后,就可以启动测试:
$ kab start
此时会为当前项目启动 WebServer,如果配置文件中有通过 browsers
指定浏览器,将自动启动这些浏览器来运行单元测试代码。对于移动端测试,可以扫描控制台上的 二维码 得到 runner
地址,打开后自动测试。
单元测试运行过程中,SUCCESS
的 Spec
会自动折叠,FAILURE
的 Spec
则会打印详细的信息,以便调试。如果需要更详细的运行报告用于调试,可在 runner
页面右上角点击 DEBUG
按钮打开新的页面。
所有单测跑完后,控制台将打印出 SUCCESS
与 FAILURE
相关的汇总信息。根据 coverageReporter
下 type
的配置,还可以打印出代码覆盖率的报表(text
类型),或者生成更为详尽的 HTML 页面(html
类型),也可以使用 |
来分隔多个报表。
根据 singleRun
项配置,如果设为 true
,则在运行完所有单测后自动退出,否则将一直运行,视 watch
配置决定是否在文件修改后重跑单测。
默认 KAB 将所有 Spec
放到 browsers
指定的浏览器运行,如果是纯 Node.js,可以通过 CLI 参数 --node
或者在配置文件中使用 node: true
来避免在浏览器环境运行 Spec
。
下面是一个典型的配置:
module.exports = {
// list of files / patterns to load in the browser
files: [
'src/**/*.less',
'test/**/*Spec.js'
],
// configure the reporter
coverageReporter: {
type : 'text|html',
dir : 'coverage/'
},
// web server port
port: 9876,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Chromium
// - Firefox
// - Opera
// - Safari
// - Phantom
// - IE (only Windows)
browsers: ['Chrome'],
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: true
};
- KAB 配置项相对
Karma
要精简许多,如果之前使用过旧版自动生成,建议使用新版生成覆盖。 -
files
的配置只有string
类型,不兼容Karma
的Object
类型,解决办法是只使用pattern
,如果配置了include: false
,直接移除该规则即可。 -
browser
配置的PhantomJS
,现在对应为Phantom
。 - 目前使用的
Jasmine
为 1.3.1、2.0.0 和 2.3.4 三个版本,默认为 1.3.1,frameworks
配置中使用jasmine2
时使用 2.0.0,jasmine2.3.4
时为 2.3.4。 - 如需支持 ES6 或其它预处理的语言,需在 WebServer 配置中,使用 key: 'source' 来标识出源码,并且生成
sourcemap
, KAB 将根据sourcemap
来标识测试的Coverage
对应源码中的位置。以下是典型的 ES6 的配置(使用 babel):
// edp-webserver-config.js 关键代码行有注释
exports.getLocations = function () {
return [
{
// 标识为需预处理的源码,edp-test 会对测试结果使用 sourcemap 映射源码
key: 'source-babel',
location: /^\/src\/.+\.js(\?.+)?/,
handler: [
file(),
babel({
loose: 'all',
// 指定生成 AMD 的模块,edp-test 不支持非 AMD 模块的测试
modules: 'amd',
compact: false,
ast: false,
blacklist: ['strict'],
})
]
},
{
location: /^.*$/,
handler: [
file()
]
}
];
};
.
http://pivotal.github.com/jasmine/