-
Notifications
You must be signed in to change notification settings - Fork 167
Test
EDP 集成了 Jasmine 与 istanbul 作为 BDD 与 Coverage 的测试,移除了对臃肿的 Karma 的依赖。
使用 Test,需要满足以下条件:
- 项目根目录下包含
test目录。 -
test目录下有配置文件config.js。
而 init 命令正是用于自动化处理创建 test 与 test/config.js 的。
$ edp test init
如果目标文件已存在,会询问用户是否覆盖。目前配置文件兼容 Karma 的大部分配置项,但是不会安装它指定的任何 plugins。
在按照 Jasmine 的指引编写好 Spec 后,置于 test 目录下(建议与待测源码目录结构类似建立子目录),保证配置文件中的 files 的 pattern 能匹配到该文件后,就可以启动测试:
$ edp test start
此时会为当前项目启动 WebServer,如果配置文件中有通过 browsers 指定浏览器,将自动启动这些浏览器来运行单元测试代码。对于移动端测试,可以扫描控制台上的 二维码 得到 runner 地址,打开后自动测试。
单元测试运行过程中,SUCCESS 的 Spec 会自动折叠,FAILURE 的 Spec 则会打印详细的信息,以便调试。如果需要更详细的运行报告用于调试,可在 runner 页面右上角点击 DEBUG 按钮打开新的页面。
所有单测跑完后,控制台将打印出 SUCCESS 与 FAILURE 相关的汇总信息。根据 coverageReporter 下 type 的配置,还可以打印出代码覆盖率的报表(text 类型),或者生成更为详尽的 HTML 页面(html 类型),也可以使用 | 来分隔多个报表。
根据 singleRun 项配置,如果设为 true,则在运行完所有单测后自动退出,否则将一直运行,视 watch 配置决定是否在文件修改后重跑单测。
默认 EDP-TEST 将所有 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'],
// If browser does not capture in given timeout [ms], kill it
captureTimeout: 60000,
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: true,
// esl require config
requireConfig: {}
};
- EDP-TEST 配置项相对
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, EDP-TEST 将根据sourcemap来标识测试的Coverage对应源码中的位置。以下是典型的 ES6 的配置(使用 babel):
// edp-webserver-config.js 关键代码行有注释
exports.getLocations = function () {
return [
{
// 标识为需预处理的源码,edp-test 会对测试结果使用 sourcemap 映射源码
key: 'source',
location: /^\/src\/.+\.js(\?.+)?/,
handler: [
file(),
babel({
loose: 'all',
// 指定生成 AMD 的模块,edp-test 不支持非 AMD 模块的测试
modules: 'amd',
compact: false,
ast: false,
blacklist: ['strict'],
})
]
},
{
location: /^.*$/,
handler: [
file()
]
}
];
};.