ng-html2js不适用于Phantom,适用于Chrome

时间:2014-10-31 20:16:15

标签: angularjs unit-testing angularjs-directive karma-runner ng-html2js

我正在使用cg-angular来支撑我的项目。

我正在测试使用templateUr和ng-html2js的指令将模板加载到模块中。当我使用Chrome作为浏览器运行测试时,它没有任何问题,但是当我使用幻影运行它时,我得到:

Error: [$injector:modulerr] Failed to instantiate module templates due to:

这是我的Gruntfile的相关部分:

karma:      {
     options:     {
         frameworks:           ['jasmine'],
         preprocessors:        {'directive/**/*.html':['ng-html2js']},
         files:                [  //this files data is also updated in the watch handler, if updated change there too
             '<%= dom_munger.data.appjs %>',
             'bower_components/angular-mocks/angular-mocks.js',
             'directive/**/*.html',
             createFolderGlobs(['*-spec.js'])
         ],
         ngHtml2JsPreprocessor:{
             moduleName:'templates'
         },
         logLevel:             'ERROR',
         reporters:            ['mocha'],
         autoWatch:            false, //watching is handled by grunt-contrib-watch
     },
     all_tests:   {
         browsers: ['PhantomJS', 'Chrome'],
         singleRun:false
     },
     during_watch:{
         browsers: ['PhantomJS'],
         singleRun:true
     }
 }

所以运行咆哮测试,运行业力:all_tests,就像一个冠军。运行业力的咕噜咕噜:在期间失败。

有没有办法检查html2js是否实际上正在运行?

修改的 这不是幽灵。如果我在'during_watch'任务中运行Chrome,它也会失败。

1 个答案:

答案 0 :(得分:1)

想出来。我使用generator-cg-angular来支撑这个项目。它使用grunt watch事件来设置一些选项。此事件仅在服务任务期间使用,而不是在测试或构建期间使用。我没有注意到它覆盖了karma.options所以html2js从未被调用过。当我将其附加到我的Gruntfile的事件部分时,html2js应该运行。下面是我的Gruntfile的相关部分,显示了这些变化。

if (grunt.file.exists(spec)) {
    var files = [].concat(grunt.config('dom_munger.data.appjs'));
    files.push('bower_components/angular-mocks/angular-mocks.js');
    files.push(spec);
    files.push('directive/**/*.html'); // This one
    grunt.config('karma.options.files', files);
    grunt.config('karma.options.ngHtml2JsPreprocessor.moduleName', 'templates'); // And this one
    tasksToRun.push('karma:during_watch');
}