我正在尝试测试从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'));
没有运气。有什么想法吗?
答案 0 :(得分:5)
对于那些仍在努力解决这个问题的人:
您可以尝试在karma config
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')