Gulp自动运行model相关测试
发布于 5 年前 作者 Neil-UWA 3505 次浏览 最后一次编辑是 4 年前 来自 分享

项目结构:

|-- common
    | -- models
	    |-- user.json
	    |-- user.js
|-- server/
...
|-- test/
    | -- models
        |-- user.test.js  //user model对应测试
|-- tasks
...

先来一个最简单的gulp 配置:

import mocha from 'gulp-mocha';

export function(gulp) {
  gulp.task('mocha', ()=>{
	return gulp.src(['test/**/*.js'], {read: false})
			.pipe(mocha({reporter: 'spec'}));	
  })
  gulp.watch(['test/**/*.js'], ['mocha']);
}

以上配置对于测试变动时自然没问题,但是我们希望当我们对model进行修改时,自动运行测试心确保对model的修改不破坏已有的功能与特性。因此,以上代码变更为:

export function(gulp) {
  gulp.task('mocha', ()=>{
	return gulp.src([
	  'test/**/*.js', 
	  'common/modal/**/*.js'
	], {read: false}).pipe(mocha({reporter: 'spec'})
  });
  gulp.watch(['test/**/*.js'], ['mocha']);
}

做了如修改之后 ,当我们对model进行任何修改,测试都会自动运行。但是这个配置有一个不足之处。当测试用例不多时该配置没任何问题,也花不了多少时间,但是一旦随着项目变大,测试用例变多,对任一一个model的修改都会跑一遍所有的测试是不可接受的,除非你想在测试的时候喝一杯咖啡。

因此我们想再进一步优化测试,当model变动时,只让model相关的测试跑一遍.

export function(gulp) {
  gulp.task('watch:models', ()=>{
     var watcher = gulp.watch([
      'common/**/*.js',
      'common/**/*.json',
      'test/**/*.test.js'
     ], ['']);

    watcher.on('change', (e)=>{
      var filename = e.path.substr(e.path.lastIndexOf('/')+1).split('.')[0];
      gulp.src(`test/**/${filename}.test.js`, {read: false})
      .pipe(mocha({reporter: 'spec'}));
    });

  })
}

如此修改之后,任何对model相关的修改都会促发运行与其相关的测试。当然上面还只是一个比较简易的配置,如想再继续优化,刚可以使用gulp-filter, gulp-changed 等,及使用正则做符合你项目设计的测试配置。

回到顶部