我正在使用Jasmine Standalone来测试我的Angular目录,
SimpleDirective.js
var app = angular.module("myApp", []);
app.controller('SimpleDirectiveController', function($scope) {
$scope.customer = {
name: 'Igor',
address: '123 Somewhere'
};
});
app.directive('helloWorld', function() {
return {
restrict: 'AE',
replace: true,
// Isolate scope:
// separate the scope inside a directive from the scope outside, and then map the outer scope to a directive's inner scope.
scope: {
customerInfo: '=info'
},
//templateUrl points to an external html template.
templateUrl: 'fixture/hello.html'
};
});
夹具/ hello.html的,
<div class="customer"><b>Hello</b> {{customerInfo.name}}</div>
SimpleDirectiveSpec.js,
describe("simpleDirective Test ", function(){
// Boilerplate starts from here...
var compile, scope, element;
// Name of the module my directive is in.
beforeEach(module('myApp'));
// The external template file referenced by templateUrl.
beforeEach(module('fixture/hello.html'));
beforeEach(inject(function($compile,$rootScope) {
compile = $compile;
scope = $rootScope;
element = angular.element('<div data-hello-world info="customer"></div>');
compile(element)(scope);
scope.$digest();
}));
// ...Boilerplate ends here
it('renders the customer template', function() {
var customer = element.find('.customer');
expect(customer.length).toBe(1);
});
});
我收到此错误,
错误:[$ injector:modulerr]无法实例化模块 fixture / hello.html由于:[$ injector:nomod]模块 'fixture / hello.html'不可用!你要么拼错了 模块名称或忘记加载它。如果注册模块,请确保 您将依赖项指定为第二个参数。
任何想法我错过了什么?
答案 0 :(得分:3)
您应该为模板创建一个模块,并将模板html放入templateCache。
它应该是这样的:
angular.module("fixture/hello.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("fixture/hello.html",
"<div class=\"customer\"><b>Hello</b> {{customerInfo.name}}</div>");
}]);
如果您正在使用Karma进行测试,则会出现一个名为ng-html2js的自动化业力模块。
答案 1 :(得分:1)
我假设你正在使用karma html预处理器来处理html模板https://github.com/karma-runner/karma-ng-html2js-preprocessor。确保生成的模块具有与您声明的模块名称'fixture/hello.html'
匹配的路径名。
您可以通过打开chrome developer console并检查source
选项卡来验证文件,模块将作为js文件加载。确保生成的模块名称匹配。