dimanche 2 août 2015

AngularJS Service Jasmine Unit Test Unflushed Request Error

I'm writing my first unit test to check the functionality of a AngularJS service. This is the part of the service with the getList function I'm testing:

(function() {
'use strict';

angular
    .module('app.services')
    .factory('RestService', RestService);

    RestService.$inject = [ '$http' ];

    function RestService($http) { 

        var service = {
            getList: getList,
            ...
        };
        return service;

        function getList(url) {
            return $http.get(url)
            .then(function(response) {
                console.log('RestService: got list: ' + response.data.length);
                return response.data;
            })
            .catch(function(errResponse) {
                console.error('RestService: error getting list: ' + errResponse.status);       
            });
        }

And I've written the following unit test:

'use strict';

describe('Test Rest Service', function() {

var httpBackend;
var RestService;
var reqHandler;

beforeEach(module('app.services'));

beforeEach(inject(function ($httpBackend, _RestService_) {
    httpBackend = $httpBackend;
    RestService = _RestService_;
    reqHandler = httpBackend.when('GET', '/api/events')
                    .respond(200, '[{ "event": 1 }, { "event": 2 }]');
}));

afterEach(function() {
    httpBackend.verifyNoOutstandingExpectation();
    httpBackend.verifyNoOutstandingRequest();
});

it('should get a list of events', function() {

    var url = '/api/events';
    httpBackend.expectGET(url);
    RestService.getList(url).then(function(response) {
        httpBackend.flush();
        expect(response.length).toEqual(2);
    });
});
});

When I run the test I get the following error:

Test Rest Service
PhantomJS 1.9.8 (Windows 8 0.0.0) Test Rest Service "after each" hook FAILED
    Error: Unflushed requests: 1

My first guess is that then then part of the test is not executing but I can't find a way to check this. Can anyone explain why I have an unflushed request? Also, is there some way I can step through the test or at least print the variables to screen so I can figure out what's going on?

Thanks in advance!

Aucun commentaire:

Enregistrer un commentaire