要加载模板文件,您必须配置karma-ng-html2js-preprocessor
在业力中。
首先,访问这一页并按照安装说明进行操作。然后,您需要在 karma.config.js 文件中添加几个条目:
files: [
'templates/*.html'
],
这告诉 karma 加载模板文件夹中的所有 html 文件(如果您的模板位于其他位置,则将该文件夹放在那里)。
preprocessors: { '**/*.html': 'ng-html2js' },
这告诉 karma 通过ng-html2js
预处理器,然后将它们转换为角度模块,将模板放入$templateCache
服务。这样,当$httpBackend
向“服务器”查询模板,它被模板缓存拦截并返回正确的 html。这里一切都很好,除了模板的 URL:它必须与templateUrl
指令中的属性,以及ng-html2js
默认情况下将完整路径作为 uri 传递。所以我们需要对这个值进行变换:
ngHtml2JsPreprocessor: {
cacheIdFromPath: function(filepath) {
var matches = /^\/(.+\/)*(.+)\.(.+)$/.exec(filepath);
return 'templates/' + matches[2] + '.' + matches[3];
}
},
这收到filepath
并将其传递给正则表达式将路径、文件名和扩展名提取到数组中。然后你在前面加上'templates/
文件名和扩展名,您将获得预期的 uri。
完成所有这些后,使模板可用只需在运行测试之前加载模块即可:
beforeEach(module('templates/TopLevelMenu.Template.html'));
记住,module
是位于的外部服务角度模拟.js.
为了将自定义服务注入指令中,您需要覆盖服务的提供者:
beforeEach(module(function ($provide) {
$provide.provider('$userDetails', function () {
this.$get = function () {
return {
name: 'test name',
gravatar: 'test avatar'
};
}
});
}));
$provide
是为您的提供商提供的服务。因此,如果您想注入模拟依赖项,您可以在此处重写提供程序。
在测试之前执行该代码,您将获得一个模拟$userDetails
返回您预定义字符串的服务。