如何使用grunt设置浏览器内测试?

时间:2013-11-14 16:49:44

标签: javascript google-chrome gruntjs mocha grunt-contrib-watch

我是咕噜咕噜的新手。我正在使用a version of yeoman webapp generator(当我做对了,我想分叉)。它似乎服务于网站并正确运行mocha测试,但在livereload上遇到了麻烦。

我想要做的是让它在浏览器中运行mocha测试,因此我可以使用控制台调试和/或更丰富的输出格式。我在grunt中设置了一个测试:浏览器任务:

grunt.registerTask('test', function( target ) { 
    var tasks;
    if ( target === 'browser' ) {
        tasks = [
            'clean:server',
            'concurrent:test',
            'autoprefixer',
            'connect:livereload_test',
            'watch' ];
    } else {
        tasks = [
            'clean:server',
            'concurrent:test',
            'autoprefixer',
            'connect:test',
            'mocha' 
        ];
    }
    grunt.task.run( tasks );
});

添加了“connect:livereload_test”并修改了“watch:livereload”:

        livereload_test: {
            options: {
                open: 'test/index.html',
                base: [
                    '.tmp',
                    '.',
                    '<%= yeoman.app %>'
                ]
            }
        },

        livereload: {
            options: {
                livereload: '<%= connect.options.livereload %>'
            },
            files: [
                '{<%= yeoman.app %>,test}/*.html',
                '.tmp/styles/{,*/}*.css',
                '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
                'test/*.js',
                'test/spec/{,*/}*.js',
                '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
                'test/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
            ]
        }

分别。似乎成功地提供了test / index.html。但是,当我修改test / spec / test.js以更改测试描述(例如)时,它会注意到更改,但测试结果并不反映更改。我假设有一些我错过的笨拙的代码,但它可能是什么?

1 个答案:

答案 0 :(得分:1)

我们已在浏览器中实现了mocha测试运行,其中包含generator-backbone中的livereload。

livereload片段由connect-livereload生成。

var LIVERELOAD_PORT = 35729;
var SERVER_PORT = 9000;
var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT});

但仅需要('connect-livereload')不会插入index.html,您需要在connect:test

中指定它
    livereload: {
        options: {
            middleware: function (connect) {
                return [
                    lrSnippet,
                    mountFolder(connect, '.tmp'),
                    mountFolder(connect, yeomanConfig.app)
                ];
            }
        }
    },
    test: {
        options: {
            port: 9001,
            middleware: function (connect) {
                return [
                    lrSnippet,
                    mountFolder(connect, '.tmp'),
                    mountFolder(connect, 'test'),
                    mountFolder(connect, yeomanConfig.app)
                ];
            }
        }
    },

检查middleware中的lrSnippet

然后我们需要指定任务,在generator-backbone中我们有grunt test:server。 (source

if (target === 'test') {
    return grunt.task.run([
        'clean:server',
        'coffee',
        'createDefaultTemplate',
        'jst',
        'compass:server',
        'connect:test',
        'watch:livereload'
    ]);
}

您可以在yeoman/generator-backbone/issues上找到相同的讨论。 如果您想查看,我的初始解决方法可以gist获得。

希望对你有所帮助。