Testing angular controllers with Jasmine
Testing angular controllers with Jasmine
HTML
<script src="http://jasmine.github.io/1.3/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/1.3/lib/jasmine-html.js"></script>
<link rel="stylesheet" href="http://jasmine.github.io/1.3/lib/jasmine.css">
<script src="http://code.angularjs.org/1.2.9/angular.js"></script>
<script src="http://code.angularjs.org/1.2.9/angular-mocks.js"></script>
JavaScript
(function (angular) {
var myApp = angular.module('myApp', []);
myApp.service('MyService', function ($q, $timeout) {
this.initialised = false;
this.getAll = function () {
var deferred = $q.defer();
var p1 = $timeout(function () {
return 'p1_return_value';
}, 1999);
var p2 = $timeout(function () {
return 'p2_return_value';
}, 1800);
return $q.all([p1, p2]);
};
this.init = function () {
// Simulate an async action.
$timeout(function () {
this.initialised = true;
}.bind(this), 9001);
};
});
})(angular);
describe('service', function () {
var Subject, $timeout;
beforeEach(function () {
module('myApp');
inject(function ($injector) {
Subject = $injector.get('MyService');
$timeout = $injector.get('$timeout');
});
});
it('is not initalised before 9001ms', function () {
Subject.init();
$timeout.flush(9000);
expect(Subject.initialised).toEqual(false);
});
it('is initialised after 9001ms', function () {
Subject.init();
$timeout.flush(9001);
expect(Subject.initialised).toEqual(true);
});
it('some $q.all thingy returns the expected result', function () {
Subject.init();
var response;
Subject.getAll().then(function (r) {
response = r;
});
$timeout.flush(2000);
expect(response).toEqual(['p1_return_value', 'p2_return_value']);
expect(Subject.initialised).toEqual(false);
});
});
// --- Runner -------------------------
(function () {
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
...