Angular Unit Testing

How to mock the HTTP backend

by Jeremy Likness

HTML

<script src="http://code.angularjs.org/1.2.9/angular.js"></script>
<script src="http://jasmine.github.io/2.0/lib/jasmine.js"></script>
<link rel="stylesheet" href="http://jasmine.github.io/2.0/lib/jasmine.css">
<script src="http://jasmine.github.io/2.0/lib/jasmine-html.js"></script>
<script src="http://jasmine.github.io/2.0/lib/boot.js"></script>
<script src="http://code.angularjs.org/1.2.9/angular-mocks.js"></script>

JavaScript

describe('$httpBackend', function () {

    var mockList = [{
        id: 1,
        firstName: "Jeremy",
        lastName: "Likness"
    }];

    it("expects $http to call and retrieve mock contacts",

    inject(function ($http, $httpBackend) {

        var url = '/api/contacts',
            successCallback = jasmine.createSpy();

        console.log(successCallback);
        $httpBackend.expectGET(url).respond(200, mockList);
        $http.get(url).success(successCallback);

        expect(successCallback).not.toHaveBeenCalled();

        $httpBackend.flush();
        
        console.log(successCallback.calls.mostRecent().args);
        
        expect(successCallback.calls.mostRecent().args)
             .toContain(mockList);
        
        expect(successCallback.calls.mostRecent().args[1])
            .toBe(200);
    }));

});