StackOverflow Question: Test controller with service injection
http://stackoverflow.com/questions/32766328/test-controller-with-service-injection
by Hari Menon
HTML
<link rel="stylesheet" href="https://jasmine.github.io/2.3/lib/jasmine.css">
<script src="https://jasmine.github.io/2.3/lib/jasmine.js"></script>
<script src="https://jasmine.github.io/2.3/lib/jasmine-html.js"></script>
<script src="https://jasmine.github.io/2.3/lib/boot.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular-mocks.js"></script>
JavaScript
// CODE
angular.module('octosendApp', [])
.factory('user', ['$http', '$q', function ($http, $q) {
var User = function (id) {
this.id = id;
this.name = null;
};
User.prototype.load = function () {
var deferred = $q.defer();
$http.post('/user/' + this.id + '/load')
.success(function (data) {
var user = new User(data.id);
user.name = data.name
deferred.resolve(user);
})
.error(function (err, code) {
deferred.reject(err);
$log.error(err, code);
});
return deferred.promise;
};
return User;
}])
.controller('UserCtrl', ['$scope', '$routeParams', 'User', function ($scope, $routeParams, User) {
$scope.hello = "lol";
$scope.userId = $routeParams.id;
var user = new User($scope.userId);
$scope.load = function () {
user.load().then(function (user) {
$scope.name = user.name;
}, function () {
$scope.dataFail = 'error error';
});
};
$scope.load();
}]);
// SPECS
describe('Controller: UserCtrl', function () {
var $controller, $scope, User;
beforeEach(module('octosendApp', function ($provide) {
// User = jasmine.createSpyObj('User', ['load']);
// User.load.and.returnValue({
// name: 'testName'
// });
User = function (id) {
return {
load: function () {
return {
then: function (success, failure) {
success({
name: 'testUser ' + id
});
}
};
}
};
};
$provide.value('User', User);
}));
beforeEach(inject(function (_$controller_, $rootScope, _User_) {
$scope = $rootScope.$new();
User = _User_;
$controller =...