Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 2d5297e

Browse files
TimothyAhongpetebacondarwin
authored andcommitted
docs(guide:unit-testing): add an example unit test for directives
1 parent cd38cbf commit 2d5297e

File tree

1 file changed

+56
-1
lines changed

1 file changed

+56
-1
lines changed

docs/content/guide/dev_guide.unit-testing.ngdoc

+56-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,62 @@ expect(length('abc')).toEqual(3);
275275
</pre>
276276

277277
## Directives
278-
Directives in angular are responsible for updating the DOM when the state of the model changes.
278+
Directives in angular are responsible for encapsulating complex functionality within custom HTML tags,
279+
attributes, classes or comments. Unit tests are very important for directives because the components
280+
you create with directives may be used throughout your application and in many different contexts.
281+
282+
### Simple HTML Element Directive
283+
284+
Lets start with an angular app with no dependencies.
285+
286+
<pre>
287+
var app = angular.module('myApp', []);
288+
</pre>
289+
290+
Now we can add a directive to our app.
291+
292+
<pre>
293+
app.directive('aGreatEye', function () {
294+
return {
295+
restrict: 'E',
296+
replace: true,
297+
template: '<h1>lidless, wreathed in flame</h1>'
298+
};
299+
});
300+
</pre>
301+
302+
This directive is used as a tag `<a-great-eye></a-great-eye>`. It replaces the entire tag with the
303+
template `<h1>lidless, wreathed in flame</h1>`. Now we are going to write a jasmine unit test to
304+
verify this functionality.
305+
306+
<pre>
307+
describe('Unit testing great quotes', function() {
308+
var $compile;
309+
var $rootScope;
310+
311+
// Load the myApp module, which contains the directive
312+
beforeEach(module('myApp'));
313+
314+
// Store references to $rootScope and $compile
315+
// so they are available to all tests in this describe block
316+
beforeEach(inject(function(_$compile_, _$rootScope_){
317+
// The injector unwraps the underscores (_) from around the parameter names when matching
318+
$compile = _$compile_;
319+
$rootScope = _$rootScope_;
320+
}));
321+
322+
it('Replaces the element with the appropriate content', function() {
323+
// Compile a piece of HTML containing the directive
324+
var element = $compile("<a-great-eye></a-great-eye>")($rootScope);
325+
// Check that the compiled element contains the templated content
326+
expect(element.html()).toContain("lidless, wreathed in flame");
327+
});
328+
});
329+
</pre>
330+
331+
We inject the $compile service and $rootScope before each jasmine test. The $compile service is used
332+
to render the aGreatEye directive. After rendering the directive we ensure that the directive has
333+
replaced the content and "lidless, wreathed in flame" is present.
279334

280335
## Mocks
281336
oue

0 commit comments

Comments
 (0)