为了查看测试结果,我使用了jasmine-html库和jasmine css。
我能够轻松地测试服务,但是当涉及到测试指令时,我无法访问隔离的范围。要记住的一件事是我不想在我的指令中使用控制器,而是链接函数。 (根据Angular doc,仅当您希望将API公开给其他指令时,才应使用控制器。)
我在StackOverflow上找到了多个答案,但没有一个有效。
我尝试的最后一件事是基于this回答的问题StackOverflow。
这是我试图复制的测试
describe('Wikis Directive Test Suite', function () {
var $scope, scope, elem, directive, linkFn, html;
beforeEach(module('app'));
beforeEach(function () {
html = '<wikis></wikis>';
inject(function ($compile, $rootScope, $templateCache) {
$templateCache.put('templates/wiki-list.html', '<div>wiki template</div>');
$scope = $rootScope.$new();
$scope.wikis = [];
elem = angular.element(html);
elem= $compile(elem)($scope);
//scope = elem.isolateScope(); /*This is always undefined!*/
scope = elem.scope(); /* this doesn't have addWiki, only the empty wikis array */
$rootScope.$digest();
});
});
it('add Wiki should add a valid wiki URL to artist', function () {
var url = 'http://www.foo.com';
scope.newWikiURL = url;
scope.addWiki();
expect(scope.wikis.length).toBe(1);
expect(scope.wikis[0]).toBe(url);
expect(scope.newWikiURL).toBe('');
});
});
“唯一”的区别是,我需要使用Jasmine 2.4.1和Angular 1.0.7。不幸的是,似乎这些库的测试不起作用。 问题是isolateScope()总是未定义的!
我已经创建了一个可以重现问题的plunker。
答案 0 :(得分:0)
好吧,我(其中一位同事发现了)我做错了什么!
这是正确的代码。
describe('Wikis Directive Test Suite', function () {
var $scope, scope, elem, directive, linkFn, html;
beforeEach(module('app'));
beforeEach(function () {
html = '<wikis></wikis>';
inject(function ($compile, $rootScope, $templateCache) {
$templateCache.put('templates/wiki-list.html', '<div>wiki template</div>');
$scope = $rootScope.$new();
$scope.wikis = [];
elem = angular.element(html);
elem = $compile(elem)($scope);
$scope.$digest();
scope = elem.isolateScope();
});
});
it('add Wiki should add a valid wiki URL to artist',inject( function () {
var url = 'http://www.foo.com';
scope.newWikiURL = url;
scope.addWiki();
expect(scope.wikis.length).toBe(1);
expect(scope.wikis[0]).toBe(url);
expect(scope.newWikiURL).toBe('');
}));
});