Created
May 1, 2014 12:46
-
-
Save lucassus/41b9a1651229745fa34c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var app = angular.module('angularjsTddRecipesApp'); | |
var CommentsCtrl = function($scope, loadComments) { | |
$scope.load = function() { | |
var promise = loadComments(); | |
promise.then(function(response) { | |
$scope.comments = response.data; | |
}); | |
promise.catch(function() { | |
$scope.comments = []; | |
}); | |
} | |
}; | |
CommentsCtrl.$inject = ['$scope', 'loadComments']; | |
app.controller('CommentsCtrl', CommentsCtrl); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
describe('Controller: CommentsCtrl', function() { | |
// TODO check out https://github.com/angular/angular.js/issues/7056 | |
beforeEach(module('angularjsTddRecipesApp', { | |
loadComments: sinon.mock() | |
})); | |
// TODO better style of module initialization | |
// beforeEach(function() { | |
// module('angularjsTddRecipesApp', { | |
// loadComments: sinon.mock() | |
// }); | |
// }); | |
var $scope; | |
var CommentsCtrl; | |
// initialize the controller and a mock scope | |
beforeEach(inject(function($controller, $rootScope) { | |
$scope = $rootScope.$new(); | |
CommentsCtrl = $controller('CommentsCtrl', { | |
$scope: $scope | |
}); | |
})); | |
describe('#load()', function() { | |
describe('on success', function() { | |
beforeEach(inject(function($q, loadComments) { | |
var deferred = $q.defer(); | |
deferred.resolve({ data: ['one', 'two', 'three'] }); | |
loadComments.once().returns(deferred.promise); | |
})); | |
afterEach(inject(function(loadComments) { | |
// another method of verification | |
expect(loadComments).to.have.been.called; | |
// loadComments.restore(); | |
// verify that mock has been called (also restores the mock) | |
loadComments.verify(); | |
})); | |
it('loads all comments', inject(function($q, $rootScope) { | |
$scope.load(); | |
$rootScope.$apply(); | |
expect($scope.comments).to.not.be.undefined; | |
expect($scope.comments).to.have.length(3); | |
})); | |
}); | |
describe('on error', function() { | |
beforeEach(inject(function($q, loadComments) { | |
var deferred = $q.defer(); | |
deferred.reject(); | |
loadComments.once().returns(deferred.promise); | |
})); | |
afterEach(inject(function(loadComments) { | |
loadComments.verify(); | |
})); | |
it('loads no comments', inject(function($rootScope) { | |
$scope.load(); | |
$rootScope.$apply(); | |
expect($scope.comments).to.not.be.undefined; | |
expect($scope.comments).to.have.length(0); | |
})); | |
}); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PhantomJS 1.9.7 (Linux) Controller: CommentsCtrl #load() on error loads no comments FAILED | |
ExpectationError: Anonymous mock already called once | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/sinon/pkg/sinon.js:2778 | |
at verifyCallAllowed (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/sinon/pkg/sinon.js:2643) | |
at invoke (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/sinon/pkg/sinon.js:2576) | |
at stub (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/sinon/pkg/sinon.js:1524) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/app/scripts/controllers/commentsCtrl.js:9 | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/test/spec/controllers/commentsCtrlSpec.js:74 | |
at invoke (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/app/bower_components/angular/angular.js:3869) | |
at workFn (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/app/bower_components/angular-mocks/angular-mocks.js:2147) | |
at callFn (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4338) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4331 | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4728 | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4819 | |
at next (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4653) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4663 | |
at next (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4601) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4625 | |
at done (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4300) | |
at callFn (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4343) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4331 | |
at next (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4626) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4630 | |
at timeslice (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:5761) | |
undefined | |
PhantomJS 1.9.7 (Linux) Controller: CommentsCtrl #load() on error "after each" hook: workFn FAILED | |
ExpectationError: Expected Anonymous mock([...]) once (called once) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/sinon/pkg/sinon.js:2778 | |
at verify (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/sinon/pkg/sinon.js:2763) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/test/spec/controllers/commentsCtrlSpec.js:70 | |
at invoke (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/app/bower_components/angular/angular.js:3869) | |
at workFn (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/app/bower_components/angular-mocks/angular-mocks.js:2147) | |
at callFn (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4338) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4331 | |
at next (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4626) | |
at /home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:4630 | |
at timeslice (/home/lucassus/Projects/OpenSource/angularjs-tdd-recipes/node_modules/mocha/mocha.js:5761) | |
undefined |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var app = angular.module('angularjsTddRecipesApp'); | |
app.service('loadComments', function($http) { | |
return function() { | |
return $http.get('/comments'); | |
}; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment