1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
// 'use strict';
describe('Directive: widget', function () {
var element, scope, rootScope, isoScope, compile, provide;
function Type() {
}
Type.prototype = {
setup: function () {
},
init: function () {
},
destroy: function () {
}
};
beforeEach(function () {
spyOn(Type.prototype, 'setup');
spyOn(Type.prototype, 'init');
spyOn(Type.prototype, 'destroy');
// define mock objects here
});
// load the directive's module
beforeEach(module('ui.dashboard', function ($provide, $controllerProvider) {
provide = $provide;
// Inject dependencies like this:
$controllerProvider.register('DashboardWidgetCtrl', function ($scope) {
});
}));
beforeEach(inject(function ($compile, $rootScope) {
// Cache these for reuse
rootScope = $rootScope;
compile = $compile;
// Other setup, e.g. helper functions, etc.
// Set up the outer scope
scope = $rootScope.$new();
scope.widget = {
dataModelType: Type
};
compileTemplate = jasmine.createSpy('compileTemplate');
scope.compileTemplate = compileTemplate;
}));
function compileWidget() {
// Define and compile the element
element = angular.element('<div widget><div class="widget-content"></div></div>');
element = compile(element)(scope);
scope.$digest();
isoScope = element.isolateScope();
}
it('should create a new instance of dataModelType if provided in scope.widget', function () {
compileWidget();
expect(scope.widget.dataModel instanceof Type).toBe(true);
});
it('should call setup and init on the new dataModel', function () {
compileWidget();
expect(Type.prototype.setup).toHaveBeenCalled();
expect(Type.prototype.init).toHaveBeenCalled();
});
it('should call compile template', function () {
compileWidget();
expect(scope.compileTemplate).toHaveBeenCalled();
});
it('should create a new instance of dataModelType from string name', function () {
// register data model with $injector
provide.factory('StringNameDataModel', function () {
return Type;
});
scope.widget = {
dataModelType: 'StringNameDataModel'
};
compileWidget();
expect(scope.widget.dataModel instanceof Type).toBe(true);
expect(Type.prototype.setup).toHaveBeenCalled();
expect(Type.prototype.init).toHaveBeenCalled();
});
it('should validate data model type', function () {
scope.widget = {
dataModelType: {}
};
expect(function () {
compileWidget()
}).toThrowError();
});
});
|