web-dev-qa-db-fra.com

AngularJS et UI-Router: «Erreur: transition remplacée» pendant les tests unitaires angularjs

J'essaie de créer un package d'autorisation pour un de mes projets. Je reçois l'erreur "transition remplacée" lors de mes tests unitaires, et je ne peux pas savoir où cela serait réellement.

Test de l'unité:

import angular from 'angular';
import 'angular-mocks';
import worldManagerApp from '../../src/world-manager-app';
import security from '../../src/security/security';

const {inject, module} = angular.mock;

describe('LoginService', ()=> {
    let $httpBackend;
    let $rootScope;
    let successHandler;
    let errorHandler;
    let LoginService;

    const USER = {username: "TEST", password: "PASSWORD"};

    beforeEach(function() {
        module(worldManagerApp);
        module(security);

    });

    beforeEach(inject((_$httpBackend_, _LoginService_, _$rootScope_) => {
        $httpBackend = _$httpBackend_;
        $rootScope = _$rootScope_;
        LoginService = _LoginService_;

        successHandler = jasmine.createSpy('successHandler');
        errorHandler = jasmine.createSpy('errorHandler');
    }));

    it('should exist', () => {
        expect(LoginService).toBeDefined();
    });

    describe('.login()', () => {

        describe('when given a proper username and password', () => {
           it('should return the username and success', () => {
               $httpBackend.expectPOST('/login').respond(200, {user: USER});
               LoginService.login("TEST", "PASSWORD");
               $rootScope.$digest();
               $httpBackend.flush();

               expect($rootScope.currentUser).toEqual("TEST");
           });
        });
    });

});

Un service:

export default function LoginService($http){
    'ngInject';

    let service = {};
    service.login = login;

    function login(username, password){
        $http({
            url:'/login',
            method: 'POST',
            data: {
                username: username,
                password: password,
            },
        }).then (function(response) {
            response.username;
        }).catch(function(response){
        });
    }

    return service;
}

Erreur:

PhantomJS 1.9.8 (Windows 8 0.0.0) LoginService .login() when given a proper username and password should return the username and success FAILED
        Error: transition superseded
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:9387 <- node_modules/angular-mocks/angular-mocks.js:261:0
            at processChecks (C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:33750 <- node_modules/angular/angular.js:16674:0)
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:35048 <- node_modules/angular/angular.js:17972:0
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:34862 <- node_modules/angular/angular.js:17786:0
            at C:/Users/Manifest/AppData/Local/Temp/353229d8bf0abe298e7003bab30c0528.browserify:521 <- frontend\test\security\loginService.spec.js:42:15

Je suppose que c'est un problème ui-Router, mais je ne peux pas comprendre comment cela devrait fonctionner si je le fais mal.

18
Sarah

J'ai eu le même problème après la mise à jour angular de 1.5.9 à la version 1.6.1 et j'ai pu le résoudre en mettant à jour les dépendances avec:

npm update angular-ui-router

L'ancienne version 0.3.1 conduit à l'erreur, avec la version mise à jour 0.3.2, mon application fonctionne à nouveau correctement (maintenant avec angular 1.6.1).

35
RWAM

Lorsque mise à jour à angulaire 1.6.1 c'est le message, mais mise à nivea le ui-router à .3.2 résoudre le problème

25
blackend

Cela pourrait être une erreur avec votre logique de routage. Sinon, essayez d'ajouter ceci à votre app.config ();

$qProvider.errorOnUnhandledRejections(false)

7