jasmine + angular ex 13
promise
by dingen2010
HTML
<script src="https://jasmine.github.io/2.4/lib/jasmine.js"></script>
<script src="https://jasmine.github.io/2.4/lib/jasmine-html.js"></script>
<script src="https://jasmine.github.io/2.4/lib/boot.js"></script>
<link rel="stylesheet" href="https://jasmine.github.io/2.4/lib/jasmine.css">
<script src="https://code.angularjs.org/1.4.9/angular.js"></script>
<script src="https://code.angularjs.org/1.4.9/angular-mocks.js"></script>
JavaScript
//--------------BL------------
(function(angular) {
function GreetController(DataService) {
var self = this;
self.greeting = null;
self.init = function() {
DataService.getGreeting()
.then(function(result) {
self.greeting = result;
},
function(result) {
console.error('Error: ' + result);
});
};
}
angular.module('MyModule', [])
.controller('GreetController', ['DataService', GreetController]);
})(angular);
//--------------specs------------
describe('GreetController spec', function() {
var mockService, deferred, ctrl;
beforeEach(module('MyModule'));
beforeEach(module(function($provide) {
mockService = jasmine.createSpyObj('DataService', ['getGreeting']);
$provide.value('DataService', mockService);
}));
beforeEach(inject(function($controller) {
ctrl = $controller('GreetController');
}));
it('greeting should be null', function() {
expect(ctrl.greeting).toBeNull();
});
it('greeting should change after promise resolved', inject(function($q, $rootScope) {
//create promise
deferred = $q.defer();
//mock service response (foc controller's constructor)
mockService.getGreeting.and.returnValue(deferred.promise);
//call init()
ctrl.init();
expect(ctrl.greeting).toBeNull();
deferred.resolve('Hello World');
//not yet...
expect(ctrl.greeting).toBeNull();
//"it's important to know that the resolution of promises is tied to the digest cycle"
$rootScope.$apply();
//now!
expect(ctrl.greeting).toBe('Hello World');
}));
it('should call console.error on promise reject', inject(function($q, $rootScope) {
//create promise
deferred = $q.defer();
//mock service response (foc...