AngularJS业力测试:意外请求:GET.template.html
AngularJS Karma Test: Unexpected request: GET.template.html
我正在尝试为我的 AngularJS 应用程序设置业力测试,但我总是以某种方式失败。
我已执行所有步骤 here,但我感觉 ng-html2js 预处理器无法正常工作。我总是收到以下消息:
Error: Unexpected request: GET js/templates/my-template.template.html
这是我的代码结构
这是我的测试结构
我要测试的指令是:
angular
.module('myapp')
.directive('myDirective', ['myService', function (myService) {
return {
restrict: 'E',
templateUrl: 'js/templates/my-template.template.html',
scope: {},
link: function (scope) {
}
}
}]);
我的 karma conf 看起来像这样:
module.exports = function (config) {
config.set({
basePath: '../../',
frameworks: ['jasmine'],
files: [
//some omitted like angular and so on...
'main/resources/static/**/*.js',
'**/*.html',
'test/js/**/*Spec.js'
],
preprocessors: {
'**/*.html': ['ng-html2js']
},
ngHtml2JsPreprocessor: {
moduleName: 'templates'
}
... (more default stuff omitted)
}
和mySpec.js像这样:
describe('directive', function () {
'use strict';
beforeEach(module('myapp'));
beforeEach(module('templates'));
var elm,
scope;
beforeEach(inject(function ($rootScope, $compile) {
elm = angular.element(
'<my-directive>' +
'</my-directive>');
scope = $rootScope.$new();
$compile(elm)(scope);
scope.$digest();
}));
describe('Does something', function () {
console.log('test');
expect(true).toBe(true);
});
});
在你的 beforeEach 函数中为你的指令的 html 模板添加一个模拟模板。使用 $templateCache
:
describe('directive', function () {
'use strict';
beforeEach(module('myapp'));
beforeEach(module('templates'));
var elm,
scope;
beforeEach(inject(function ($rootScope, $compile, $templateCache) {
$templateCache.put('js/templates/my-template.template.html','HTML_OF_YOUR_DIRECTIVE');
elm = angular.element(
'<my-directive>' +
'</my-directive>');
scope = $rootScope.$new();
$compile(elm)(scope);
scope.$digest();
}));
describe('Does something', function () {
console.log('test');
expect(true).toBe(true);
});
});
我想我明白了。解决方案在 karma.conf.js:
ngHtml2JsPreprocessor: {
cacheIdFromPath: function (filepath) {
//The suggested filepath.strip would through an error
var cacheId = filepath.replace('main/resources/static/', '');
return cacheId;
},
moduleName: 'templates'
}
我正在尝试为我的 AngularJS 应用程序设置业力测试,但我总是以某种方式失败。 我已执行所有步骤 here,但我感觉 ng-html2js 预处理器无法正常工作。我总是收到以下消息:
Error: Unexpected request: GET js/templates/my-template.template.html
这是我的代码结构
这是我的测试结构
我要测试的指令是:
angular
.module('myapp')
.directive('myDirective', ['myService', function (myService) {
return {
restrict: 'E',
templateUrl: 'js/templates/my-template.template.html',
scope: {},
link: function (scope) {
}
}
}]);
我的 karma conf 看起来像这样:
module.exports = function (config) {
config.set({
basePath: '../../',
frameworks: ['jasmine'],
files: [
//some omitted like angular and so on...
'main/resources/static/**/*.js',
'**/*.html',
'test/js/**/*Spec.js'
],
preprocessors: {
'**/*.html': ['ng-html2js']
},
ngHtml2JsPreprocessor: {
moduleName: 'templates'
}
... (more default stuff omitted)
}
和mySpec.js像这样:
describe('directive', function () {
'use strict';
beforeEach(module('myapp'));
beforeEach(module('templates'));
var elm,
scope;
beforeEach(inject(function ($rootScope, $compile) {
elm = angular.element(
'<my-directive>' +
'</my-directive>');
scope = $rootScope.$new();
$compile(elm)(scope);
scope.$digest();
}));
describe('Does something', function () {
console.log('test');
expect(true).toBe(true);
});
});
在你的 beforeEach 函数中为你的指令的 html 模板添加一个模拟模板。使用 $templateCache
:
describe('directive', function () {
'use strict';
beforeEach(module('myapp'));
beforeEach(module('templates'));
var elm,
scope;
beforeEach(inject(function ($rootScope, $compile, $templateCache) {
$templateCache.put('js/templates/my-template.template.html','HTML_OF_YOUR_DIRECTIVE');
elm = angular.element(
'<my-directive>' +
'</my-directive>');
scope = $rootScope.$new();
$compile(elm)(scope);
scope.$digest();
}));
describe('Does something', function () {
console.log('test');
expect(true).toBe(true);
});
});
我想我明白了。解决方案在 karma.conf.js:
ngHtml2JsPreprocessor: {
cacheIdFromPath: function (filepath) {
//The suggested filepath.strip would through an error
var cacheId = filepath.replace('main/resources/static/', '');
return cacheId;
},
moduleName: 'templates'
}