Skip to content
hunter2009 edited this page Oct 14, 2016 · 8 revisions

EDP 集成了 Jasmineistanbul 作为 BDD 与 Coverage 的测试,移除了对臃肿的 Karma 的依赖。

初始化

使用 Test,需要满足以下条件:

  • 项目根目录下包含 test 目录。
  • test 目录下有配置文件 config.js

init 命令正是用于自动化处理创建 testtest/config.js 的。

$ edp test init

如果目标文件已存在,会询问用户是否覆盖。目前配置文件兼容 Karma 的大部分配置项,但是不会安装它指定的任何 plugins

启动测试

在按照 Jasmine 的指引编写好 Spec 后,置于 test 目录下(建议与待测源码目录结构类似建立子目录),保证配置文件中的 files 的 pattern 能匹配到该文件后,就可以启动测试:

$ edp test start

此时会为当前项目启动 WebServer,如果配置文件中有通过 browsers 指定浏览器,将自动启动这些浏览器来运行单元测试代码。对于移动端测试,可以扫描控制台上的 二维码 得到 runner 地址,打开后自动测试。

单元测试运行过程中,SUCCESSSpec 会自动折叠,FAILURESpec 则会打印详细的信息,以便调试。如果需要更详细的运行报告用于调试,可在 runner 页面右上角点击 DEBUG 按钮打开新的页面。

所有单测跑完后,控制台将打印出 SUCCESSFAILURE 相关的汇总信息。根据 coverageReportertype 的配置,还可以打印出代码覆盖率的报表(text 类型),或者生成更为详尽的 HTML 页面(html 类型),也可以使用 | 来分隔多个报表。

根据 singleRun 项配置,如果设为 true,则在运行完所有单测后自动退出,否则将一直运行,视 watch 配置决定是否在文件修改后重跑单测。

Node.js 项目

默认 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 类型,不兼容 KarmaObject 类型,解决办法是只使用 pattern,如果配置了 include: false,直接移除该规则即可。
  • browser 配置的 PhantomJS,现在对应为 Phantom
  • 目前使用的 Jasmine1.3.12.0.02.3.4 三个版本,默认为 1.3.1frameworks配置中使用jasmine2时使用 2.0.0jasmine2.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()
           ]
       }
   ];
};

.

相关资料

http://pivotal.github.com/jasmine/

http://gotwarlost.github.io/istanbul/

Hello World

Clone this wiki locally