Testing angular $resource with Jasmine

Testing angular $resource with Jasmine

by Krzysztof Safjanowski

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>
<script src="https://code.angularjs.org/1.2.9/angular-resource.js"></script>

JavaScript

//--- CODE --------------------------
(function (angular) {
    angular.module('userApp', ['ngResource'])
    .factory('User', function($resource) {
        return $resource('/user/:userId/card/:cardId', {userId: '@userId', cardId: '@id'}) 
    });
})(angular);

// ---SPECS-------------------------
describe('userApp', function () {
    var user
      , $httpBackend
    ;
    
    beforeEach(function () {
        module('userApp');
    });
    
    beforeEach(inject(function (User, _$httpBackend_) {
        user = User;
        $httpBackend = _$httpBackend_;
    }));

    describe('User /user/1/card/12', function () {
        it('Fetches coresponding user object by method GET /user/1/card/12 and save changes to /user/1/card/12', function () {
            $httpBackend.expectGET('/user/1/card/12').respond({id: 12, userId: 1, holder: "Alior"});
            $httpBackend.expectPOST('/user/1/card/12', {id: 12, userId: 1, name: "Krzysztof Safjanowski", holder: "Alior"}).respond(200);
            
            /*user.get({userId: 1, cardId: 12}, function(u) {
              u.name = "Krzysztof Safjanowski";
              u.$save();
            });*/
            
            user.get({userId: 1, cardId: 12}).$promise.then(function(u) {
              u.name = "Krzysztof Safjanowski";
              u.$save();
            })
            
            $httpBackend.flush();
        });
        
        it('Handles error occurring', function () {
            $httpBackend.expectGET('/user/1/card').respond(403, {message: "Somethings goes really wrong"});
            
            user.get({userId: 1}).$promise.then(function(u) {
            }).catch(function(e) {
                console.log(e)
            });
            
            $httpBackend.flush();
        });
    });
});

// --- Runner -------------------------
(function () {
    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.updateInterval = 1000;

    var htmlReporter = new jasmine.HtmlReporter();

   ...