Skip to content

Instantly share code, notes, and snippets.

@lucassus
Created May 1, 2014 12:46
Show Gist options
  • Save lucassus/41b9a1651229745fa34c to your computer and use it in GitHub Desktop.
Save lucassus/41b9a1651229745fa34c to your computer and use it in GitHub Desktop.
'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);
'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);
}));
});
});
});
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
'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