vendredi 17 avril 2020

Jasmine angular test failing - $q is undefined, but injected?

I have a pretty simple jasmine test that is trying to include the $q dependency to do some deferred promise work.

This code below seems to run fine, but the test is failing because inside the it() it is saying it can't read property defer of undefined (implying the $q is undefined).

Does any of this look wrong? Why isn't the inject() providing $q? The inside of the inject() function is never called at all, it seems.

(function () {
'use strict';

describe('loginService', function () {

    var $http,
        $rootScope,
        $q,
        $window,
        loginService;

    beforeEach(inject(function (_$http_, _$q_, _$rootScope_, _loginService_) {
        loginService = _loginService_;
        $http = _$http_;
        $q = _$q_;
        $rootScope = _$rootScope_;
    }));

    describe('login()', function () {

        it('forwards to index.html after successful login', function () {

            var mockedLoginResponse = $q.defer();    // <== UNDEFINED $q
            mockedLoginResponse.resolve({
                status: 200,
                data: ''
            });

            spyOn($http, 'post').and.returnValue(mockedLoginResponse.promise);

            loginService.login('username', 'password');
            $rootScope.$apply();

            console.info("LOGIN RESULT", $window.location.href);

            expect($window.location.href).toEqual('/index.html');
        });

    })

});

})();

The error of the failed test is:

HeadlessChrome 0.0.0 (Windows 10 0.0.0) loginService login() forwards to index.html after successful login FAILED Error: [$injector:unpr] http://errors.angularjs.org/1.5.8/$injector/unpr?p0=loginServiceProvider%20%3C-%20loginService at C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:6:412 at C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:43:174 at Object.d [as get] (C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:40:432) at C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:43:236 at d (C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:40:432) at e (C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:41:158) at Object.invoke (C:/Sites/opus/raptor/raptorweb/src/main/webapp/vendor.min.js:41:243) at UserContext.workFn (C:/Sites/opus/raptor/raptorweb/node_modules/angular-mocks/angular-mocks.js:3085:20) at at window.inject.angular.mock.inject (C:/Sites/opus/raptor/raptorweb/node_modules/angular-mocks/angular-mocks.js:3047:25) at Suite. (webapp/login-jasmine.js:15:20) at at webapp/login-jasmine.js:7:5 at webapp/login-jasmine.js:46:3 TypeError: Cannot read property 'defer' of undefined at at UserContext. (webapp/login-jasmine.js:28:46) at

Aucun commentaire:

Enregistrer un commentaire