当你使用生成器时,它应该已经创建了一个带有watch task的 Gruntfile 。
使用新生成的项目,服务器任务已运行该watch
任务:
grunt.registerTask('server', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
} else if (target === 'test') {
return grunt.task.run([
'clean:server',
'coffee',
'createDefaultTemplate',
'jst',
'compass:server',
'connect:test:keepalive'
]);
}
grunt.task.run([
'clean:server',
'coffee:dist',
'createDefaultTemplate',
'jst',
'compass:server',
'connect:livereload',
'open',
'watch' // <==== Here
]);
});
Watch
能够在文件更新时运行任务。在那里添加您的测试任务。
watch
yo 主干生成的示例配置:
watch: {
options: {
nospawn: true
},
coffee: {
files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'],
tasks: ['coffee:dist']
},
coffeeTest: {
files: ['test/spec/{,*/}*.coffee'],
tasks: ['coffee:test']
},
compass: {
files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
tasks: ['compass']
},
livereload: {
options: {
livereload: LIVERELOAD_PORT
},
files: [
'<%= yeoman.app %>/*.html',
'{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}'
]
},
jst: {
files: [
'<%= yeoman.app %>/scripts/templates/*.ejs'
],
tasks: ['jst']
}
}
假设您运行主干生成器以使用 Mocha 作为测试框架。
你会在你的这些部分Gruntfile.js
:
在connect
配置一个不同于应用程序端口 9000 的端口下:
connect: {
…
test: {
options: {
port: 9090, // <== Add this here
middleware: function (connect) {
return [
mountFolder(connect, '.tmp'),
mountFolder(connect, 'test'),
mountFolder(connect, yeomanConfig.app)
];
}
}
},
…
},
在 Mocha 配置下更改它用于引用的端口connect.test.options.port
:
mocha: {
all: {
options: {
run: true,
/* change ==>*/ urls: ['http://localhost:<%= connect.test.options.port %>/index.html']
}
}
},
作为注册的任务:
grunt.registerTask('test', [
'clean:server',
'coffee',
'createDefaultTemplate',
'jst',
'compass',
'connect:test',
'mocha'
]);
在watch
添加测试目标下 - 如下所示:
test: {
files: [
'<%= yeoman.app %>/*.html',
'{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
'{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
'<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}'
],
tasks: ['test']
}
通过这些更改,只要文件更改与test.files
glob 匹配,test
任务就会运行。
使其适用于您的代码的确切步骤将取决于您选择的测试框架和 grunt 插件。除了入门 - 安装插件和配置任务指南之外,请查看您的测试插件文档以确保您很好地了解其特定配置的工作原理。
您确实在答案中提到了两个测试框架。我没有使用过其中任何一个,但都有可用的 grunt 插件。
如果这些一般步骤仍然没有帮助,如果您可以提供有关您的项目的更多细节,包括您Gruntfile.js
选择的测试框架、您尝试过的内容以及您看到的错误/失败,将会很有帮助。