【问题标题】:Getting karma server to launch upon grunt watch让业力服务器在 grunt watch 时启动
【发布时间】:2015-02-20 13:20:12
【问题描述】:

在开发过程中,我使用 karma 和 grunt 来监视文件更改并运行测试。

在命令行中,我希望能够简单地输入

$ grunt watch

并让 karma 服务器启动一次,然后在文件更改时运行各种任务(包括 karma 测试)。我不想输入$ karma start

如何做到这一点?

【问题讨论】:

    标签: gruntjs karma-runner grunt-contrib-watch


    【解决方案1】:

    选项#1

    可以使用grunt-contrib-watchatBegin 选项。思路是引入一个启动任务,在watcher启动时运行:

    watch: {
        startup: {
            files: [], // This is redundant, but we get an error if not specifying files.
            tasks: [ 'karma:continuous:start' ],
            options: {
                atBegin: true,
                spawn: false
            }
        },
    
        ...
    }
    

    完整的Gruntfile.js

    module.exports = function(grunt) {
    
        grunt.initConfig({
            pkg: grunt.file.readJSON('package.json'),
    
            karma: {
                options: {
                    files:      [ 'client/**/*.spec.js' ],
                    frameworks: [ 'jasmine'   ],
                    reporters:  [ 'progress'  ],
                    browsers:   [ 'PhantomJS' ],
                    singleRun:  true,
                    autoWatch:  false
                },
                continuous: {
                    singleRun:  false,
                    background: true
                }
            },
    
            concat: { ... },
    
            uglify: { ... },
    
            watch: {
                startup: {
                    files: [], // This is redundant, but we get an error if not specifying files.
                    tasks: [ 'karma:continuous:start' ],
                    options: {
                        atBegin: true,
                        spawn: false
                    }
                },
    
                js: {
                    files: [ '<%= concat.js.src %>' ],
                    tasks: [ 'concat:js', 'uglify' ]
                },
    
                karma: {
                    files: [ '<%= concat.js.src %>', 'src/**/test/**/*.js' ],
                    tasks: [ 'karma:continuous:run' ]
                },
    
            }
        });
    
        require('load-grunt-tasks')(grunt);
    
        grunt.registerTask( 'default', [ 'concat', 'uglify', 'karma:unit:run' ] );
    };
    

    选项 #2

    thisthis 博客中所示,替代方法是代替调用

    $ grunt watch
    

    创建另一个启动 karma 服务器的任务:

    grunt.registerTask( 'serve', [ 'karma:continuous:start', 'watch' ] );
    

    然后调用:

    $ grunt serve
    

    完整的Gruntfile.js

    module.exports = function(grunt) {
    
        grunt.initConfig({
            pkg: grunt.file.readJSON('package.json'),
    
            karma: {
                options: {
                    configFile: 'karma.conf.js'
                },
                unit: {
                    singleRun: true
                },
                continuous: {
                    // keep karma running in the background
                    background: true
                }
            },
    
            concat: { ... },
    
            uglify: { ... },
    
            watch: {   
                js: {
                    files: [ '<%= concat.js.src %>' ],
                    tasks: [ 'concat:js', 'uglify' ]
                },
    
                karma: {
                    files: [ '<%= concat.js.src %>', 'src/**/test/**/*.js' ],
                    tasks: [ 'karma:continuous:run' ]
                },
    
            }
        });
    
        require('load-grunt-tasks')(grunt);
    
        grunt.registerTask( 'default', [ 'concat', 'uglify', 'karma:unit:run' ] );
    
        grunt.registerTask( 'serve', [ 'karma:continuous:start', 'watch' ] );
    };
    

    【讨论】:

    • 我应该避免像“谢谢”这样的 cmets,但是...谢谢!!
    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2015-06-25
    • 2017-08-06
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多