业力测试没有找到缓存模板

时间:2014-11-28 18:35:06

标签: angularjs angularjs-directive karma-runner karma-jasmine

我正在尝试测试从URL中提取其模板的指令。

我正在使用Karma的html2js预处理器。以下是我的karma.conf.js的相关配置:

    // list of files / patterns to load in the browser
files: [
    'angular/jquery-1.9.1.min.js',
    'angular/angular.js',
    'angular/angular-*.js',
    'angular/ui-bootstrap-0.6.0.min.js',
    'angular/healthpro-ng-commons.js',
    '../../main/webapp/js/app.js',
    '../../main/webapp/js/**/*.js',
    '../../main/webapp/js/templates/**/*.html',
    'unit/**/*.js'
],

preprocessors: {
    //location of templates
    '../../main/webapp/js/templates/**/*.html': 'html2js'
}

以下是我的业力测试的一部分:

describe('NoteDirective', function() {

var fixture, scope, $compile, $rootScope, template;

beforeEach(function() {
module('CrossReference');
});

beforeEach(inject(function($templateCache, _$compile_, _$rootScope_) {
  template = $templateCache.get('../../main/webapp/js/templates/Note.html');
  console.log('Template......', template);
  $templateCache.put('/CrossReference-portlet/js/templates/Note.html', template);   

  $compile = _$compile_;
  $rootScope = _$rootScope_;
}));

});

记录模板表明它未定义。有什么提示吗?

我也试过像这样调整预处理:

 ngHtml2JsPreprocessor: {
    stripPrefix: '../../main/webapp',
    prependPrefix: '/CrossReference-portlet'
}

然后将模板作为模块加载:

beforeEach(module('/CrossReference-portlet/js/templates/Note.html'));

没有运气。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

对于那些仍在努力解决这个问题的人:
您可以尝试在karma config

中向html2js预处理器配置添加moduleName
// karma config file
...
ngHtml2JsPreprocessor: {
    // the name of the Angular module to create
    moduleName: "myApp.templates"
}

然后在测试中,您需要将此模块与主模块一起加载,以便将模板添加到缓存中

// in your test spec
beforeEach(module('myApp'));
beforeEach(module('myApp.templates'));
beforeEach(inject(function($templateCache) {
    $templateCache.get('path/to/your/file.html');
});

这对我有用。

答案 1 :(得分:1)

template = $ templateCache.get('../../ main / webapp / js / templates / Note.html');

答案 2 :(得分:0)

相对文件路径对我来说也不起作用,但我能够通过修改karma配置文件的这一部分来实现它。

function

这样做可以让我访问想要的文件     $ templateCache.get( '/管理/文件路径/ template.html')