mardi 28 juillet 2015

Testing $http service in AngularJS

I have a service need to testing:

(function () {
    'use strict';

    var app = angular.module('patientPortal');

    app.service('SimpleServerCallService', function ($q, $http) {

        this.loadServerDataForUrl = function (url) {
            var def = $q.defer();
            $http.get(url)
                .success(function (data) {
                    if (data) {
                        def.resolve(data);
                    } else {
                        $http.post('util/log/write/info', 'No data was returned from server after call, url=' + url);
                        def.reject();
                    }
                })
                .error(function (error) {
                    $http.post('util/log/write/error', 'An error occurred while getting data from the server, error=' + error + ', url=' + url);
                    def.reject(error);
                });
            return def.promise;
        };

        this.postDataToUrl = function (url, postData) {
            var def = $q.defer();
            $http.post(url, postData)
                .success(function (data) {
                    if (data) {
                        def.resolve(data);
                    } else {
                        $http.post('util/log/write/info', 'No data was returned from server after call, url=' + url + ", postData=" + postData);
                        def.resolve();
                    }
                })
                .error(function (error) {
                    $http.post('util/log/write/error', 'An error occurred while getting data from the server, error=' + error + ', url=' + url + ", postData=" + postData);
                    def.reject(error);
                });
            return def.promise;
        };
    });

}());

And here my code:

describe('SimpleServerCall Service', function () {
    var SimpleServerCallService;
    var httpMock;
    var url = "url";

    beforeEach(module('patientPortal', function($provide){
        httpMock = jasmine.createSpyObj('$http', ['get']);
        $provide.value('$http', httpMock);       
        httpMock.get.and.returnValue(httpPromise);

    }));

    beforeEach(inject(function($injector){
        SimpleServerCallService = $injector.get('SimpleServerCallService');
    }));

    it('should make a GET request', function(){
        SimpleServerCallService.loadServerDataForUrl(url);
        expect(httpMock.get).toHaveBeenCalledWith(url);
    });
});

But when I run this test, all unit-test can't run for this code. All code in istanbul coverage is not corvered (function is not covered and statement is not covered). What can I do now?

Aucun commentaire:

Enregistrer un commentaire