Gulp自动运行model相关测试 - CNode技术社区

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

项目结构:

|-- 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 等,及使用正则做符合你项目设计的测试配置。

回到顶部

AltStyle によって変換されたページ (->オリジナル) /