尝试使用karma-ng-html2js-preprocessor。 Karma已经找到了我所有的其他东西(javascript),但是当谈到这个html预处理器时,它似乎无法从中找到并生成一个模块。
查看下面的选项对象。如您所见,我已经在files属性中添加了一个模式,并且我正在使用模块的通用名称'foo'。在测试中,每当我尝试呼叫module('foo');
时,业力就会抛出错误
我真的希望能够使用它,所以我不必将模板硬编码到我的单元测试或其他一些古怪的解决方案中。
var options = {
files: [].concat(
bowerFiles,
config.specHelpers,
clientApp + '**/*.module.js',
clientApp + '**/*.js',
clientApp + '**/*.html',
'*.html',
temp + config.templateCache.file,
config.serverIntegrationSpecs
),
exclude: [],
coverage: {
dir: report + 'coverage',
reporters: [
// reporters not supporting the `file` property
{ type: 'html', subdir: 'report-html' },
{ type: 'lcov', subdir: 'report-lcov' },
{ type: 'text-summary' } //, subdir: '.', file: 'text-summary.txt'}
]
},
ngHtml2JsPreprocessor: {
// strip this from the file path
// stripPrefix: clientApp,
moduleName: 'foo'
},
preprocessors: {}
};
options.preprocessors[clientApp + '**/*.html'] = ['ng-html2js'];
options.preprocessors[clientApp + '**/!(*.spec)+(.js)'] = ['coverage'];
return options;
}
答案 0 :(得分:0)
我知道这并不一定能回答你的问题,如果有更多信息曝光,我会补充这个答案,但我发现这个策略运作良好......
我发现指令,路由或状态的HTML模板(如果使用 ui-router )在单元测试时不应该发挥作用。单元测试是关于测试组件的接口;其公开的方法和属性。测试与HTML文档的交互实际上是使用像Protractor这样的端到端测试。
考虑到这一点,以下是我如何阻止Karma在测试期间尝试加载模板文件。
beforeEach(function() {
module('module.name.of.the.testable.component');
inject(function($templateCache) {
$templateCache.put('path/to/template/as/it/appears/in/your/component.html',
'<div></div>');
});
});