/* globals: beforeEach, describe, it, module, inject, expect */ describe('RecursionHelper', function(){ var $compile, parent, scope, link; angular.module('Tree', []).directive("tree", function(RecursionHelper){ return { restrict: "E", scope: { family: '=' }, replace: true, template: '' + '
' + '

{{ family.name }}

' + ' ' + '
', compile: function(element){ return RecursionHelper.compile(element, link); } }; }); beforeEach(module('RecursionHelper', 'Tree')); beforeEach(inject(function(_$compile_, $rootScope){ $compile = _$compile_; scope = $rootScope.$new(); scope.treeFamily = { name: "Parent", children: [ { name: "Child1", children: [ { name: "Grandchild1", children: [] }, { name: "Grandchild2", children: [] }, { name: "Grandchild3", children: [] } ] }, { name: "Child2", children: [] } ] }; })); function compileTree(){ parent = $compile('')(scope); scope.$apply(); } it('should render the whole tree', function(){ compileTree(); var children = parent.children('ul').children(); var grandChildren = children.find(':first-child').children('ul').children(); expect(children.length).toBe(2); expect(grandChildren.length).toBe(3); }); it('should call the pre and post linking functions, when passed as object in the link parameter', function(){ link = { pre: jasmine.createSpy('pre'), post: jasmine.createSpy('post') }; compileTree(); expect(link.pre).toHaveBeenCalled(); expect(link.post).toHaveBeenCalled(); }); it('should call the post linking function, when passed as function in the link parameter', function(){ link = jasmine.createSpy('post'); compileTree(); expect(link).toHaveBeenCalled(); }); });