Gruntjs 如何设置一个Grunt任务来监视文件并在每次文件更改时持续运行测试

Gruntjs 如何设置一个Grunt任务来监视文件并在每次文件更改时持续运行测试,gruntjs,yeoman,Gruntjs,Yeoman,我的出发点是。我已将其设置并正确运行 与其每次我想测试时都手动运行grunt test,不如让它在每次文件更改时自动运行测试 我希望仍然能够运行grunt服务器,因为它目前给了我所有的惊喜。有没有一种方法可以将持续集成(这个词对吗?我是新来的)添加到grunt任务中 或者最好不要触摸grunt服务器,从本质上消除grunt测试,并用运行在单独终端(如Testem或Karma)中的东西来代替它 或者像Testem或Karma这样的东西可以在grunt任务中使用,而不会丢失有用的功能。当您使用生成器

我的出发点是。我已将其设置并正确运行

与其每次我想测试时都手动运行
grunt test
,不如让它在每次文件更改时自动运行测试

我希望仍然能够运行
grunt服务器
,因为它目前给了我所有的惊喜。有没有一种方法可以将持续集成(这个词对吗?我是新来的)添加到grunt任务中

或者最好不要触摸
grunt服务器
,从本质上消除
grunt测试
,并用运行在单独终端(如Testem或Karma)中的东西来代替它


或者像Testem或Karma这样的东西可以在grunt任务中使用,而不会丢失有用的功能。

当您使用生成器时,它应该创建一个带有

对于新生成的项目,服务器任务已运行
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
    ]);
});
假设您运行主干生成器以使用Mocha作为测试框架

您将在
grunfile.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)
                ];
            }
        }
    },
    …
},
作为注册任务:

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']
    }
测试:{
档案:[
“/*.html”,
“{.tmp,}/styles/{,*/}*.css”,
“{.tmp,}/scripts/{,*/}*.js”,
“/images/{,*/}*{png,jpg,jpeg,gif,webp}”
],
任务:[“测试”]
}
通过这些更改,只要文件更改与
test.files
glob匹配,就会运行
test
任务

让代码正常工作的具体步骤取决于您选择的测试框架和grunt插件。除了和指南之外,请查看测试插件文档,以确保您很好地了解其特定配置的工作原理

您在回答中提到了两个测试框架。我没有用过这两个,但都有grunt插件可用


如果这些常规步骤仍然没有帮助,那么如果您能够提供关于您的项目的更多细节,包括您的
grunfile.js
、选择的测试框架、您尝试过的内容以及您看到的错误/失败,这将是非常有帮助的。

没错,我已经让默认设置正常工作了。运行
grunt服务器
时,我需要更改什么以使其在
grunt服务器
上连续运行测试?它将运行其所有相关任务,包括
watch
任务,该任务反过来将运行其所有任务,包括您可能配置的任何测试任务。我会尽量更新我的答案,让它更清楚。
grunt.registerTask('test', [
    'clean:server',
    'coffee',
    'createDefaultTemplate',
    'jst',
    'compass',
    'connect:test',
    'mocha'
]);
    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']
    }