Angular karma testing directive Error: Unexpected request: GET
Angular karma testing directive Error: Unexpected request: GET
我正在使用 karma 为 angular 指令设置单元测试,并且我一直在配置 ngHtml2JsPreprocessor 预处理器。我已经尝试了多种不同的方法,如 Stack Owerflow 的各种线程中描述的那样设置测试,但我正在努力寻找适合我的方法。
karma.conf.js
files: [
'bower_components/angular/angular.js',
..
..
..
'test/mock/*.js',
'test/mock/**/*.js',
'test/spec/unit/**/*.js',
'app/views/*.html',
'app/views/**/*.html'
//'app/views/**/**/*.html'
],
preprocessors: {
//'app/views/**/**/*.html': ['ng-html2js']
'app/views/**/*.html': ['ng-html2js']
},
ngHtml2JsPreprocessor: {
// strip this from the file path
stripPrefix: 'app/',
moduleName: 'PreprocessedTemplates'
},
测试文件
beforeEach(inject(function ($compile, $rootScope, $templateCache, $httpBackend) {
scope = $rootScope;
//$templateCache.put('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html'));
//$templateCache.put('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html'));
ele = angular.element(
'<konstrukt-std-filterbox title="Testing generic filter Component" items="list" source="data" filter-entity="Dim1"></konstrukt-std-filterbox>'
);
mockupDataFactory = konstruktMockupData.getInstance();
//these variables are needed.
scope.data = mockupDataFactory.pivotedData;
scope.list = ["first","second"];
scope.$apply();
}));
它在每个消息之前都失败了。
Error: Unexpected request: GET ../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html
模板的路径是
app\views\components\KonstruktStdFilterbox\KonstruktStdFilterbox.html
我知道测试无法在模板缓存中找到模板,但是如何配置 karma 以让 PreprocessedTemplates 加载我的模板?
我在 karma.conf.js 中尝试了不同的配置,请参阅上面注释掉的行。
结果是我的指令中定义了一个很难找到的路径,因此出现了错误
Error: Unexpected request: GET
../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html
angular.module('app').directive('directive', function(utilities) {
return {
restrict: 'E', //element
templateUrl: '../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html',
scope: true,
replace: true,
..
当我将 templateUrl 更改为此时,测试 运行 很好!
templateUrl:
'views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html
我正在使用 karma 为 angular 指令设置单元测试,并且我一直在配置 ngHtml2JsPreprocessor 预处理器。我已经尝试了多种不同的方法,如 Stack Owerflow 的各种线程中描述的那样设置测试,但我正在努力寻找适合我的方法。
karma.conf.js
files: [
'bower_components/angular/angular.js',
..
..
..
'test/mock/*.js',
'test/mock/**/*.js',
'test/spec/unit/**/*.js',
'app/views/*.html',
'app/views/**/*.html'
//'app/views/**/**/*.html'
],
preprocessors: {
//'app/views/**/**/*.html': ['ng-html2js']
'app/views/**/*.html': ['ng-html2js']
},
ngHtml2JsPreprocessor: {
// strip this from the file path
stripPrefix: 'app/',
moduleName: 'PreprocessedTemplates'
},
测试文件
beforeEach(inject(function ($compile, $rootScope, $templateCache, $httpBackend) {
scope = $rootScope;
//$templateCache.put('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html'));
//$templateCache.put('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html'));
ele = angular.element(
'<konstrukt-std-filterbox title="Testing generic filter Component" items="list" source="data" filter-entity="Dim1"></konstrukt-std-filterbox>'
);
mockupDataFactory = konstruktMockupData.getInstance();
//these variables are needed.
scope.data = mockupDataFactory.pivotedData;
scope.list = ["first","second"];
scope.$apply();
}));
它在每个消息之前都失败了。
Error: Unexpected request: GET ../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html
模板的路径是
app\views\components\KonstruktStdFilterbox\KonstruktStdFilterbox.html
我知道测试无法在模板缓存中找到模板,但是如何配置 karma 以让 PreprocessedTemplates 加载我的模板? 我在 karma.conf.js 中尝试了不同的配置,请参阅上面注释掉的行。
结果是我的指令中定义了一个很难找到的路径,因此出现了错误
Error: Unexpected request: GET ../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html
angular.module('app').directive('directive', function(utilities) {
return {
restrict: 'E', //element
templateUrl: '../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html',
scope: true,
replace: true,
..
当我将 templateUrl 更改为此时,测试 运行 很好!
templateUrl: 'views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html