2017-01-03 19 views
13

Próbuję utworzyć pakiet autoryzacji dla mojego projektu. Podczas testów jednostkowych otrzymuję błąd "zastąpione zastąpieniem" i nie mogę się dowiedzieć, gdzie to faktycznie jest.AngularJS i UI-Router: "Błąd: przejście zastąpione" podczas testów jednostek angularjs

Test

Jednostka:

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"); 
      }); 
     }); 
    }); 

}); 

Usługa:

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; 
} 

Błąd:

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 

Zakładam, że jest to problem ui-Router, ale nie mogę dowiedzieć się, jak go powinien działać, jeśli robię to źle.

Odpowiedz

29

miałem ten sam problem po aktualizacji kątową od 1.5.9 do wersji 1.6.1 i może go rozwiązać przez aktualizację z zależności:

npm update angular-ui-router 

starej wersji 0.3.1 prowadzi do błędu, z zaktualizowana wersja 0.3.2 moja aplikacja działa poprawnie (teraz z kanciastą wersją 1.6.1).

+0

Dzięki, to mi się udało. – aoakeson

+0

To działało dla mnie wcześniej, gdy próbowałem go dla innej aplikacji, to nt working.errors są nadal widziane – user168983

+0

Uaktualnienie Ui-routera rozwiązało problem. Twoje zdrowie! – Sairam

22

Kiedy aktualizowania do kątowe 1.6.1 to wiadomość, ale modernizacjiui-router do 0.3.2 rozwiązać problem

+0

0.4.2 działa dla mnie – Lola

6

Może to być błąd z logiki routingu. Jeśli nie to, spróbuj dodać to do swojego app.config();

$qProvider.errorOnUnhandledRejections(false)

+1

To działało dla mnie. Zaktualizowałem angularjs do wersji 1.6.4 i zacząłem otrzymywać "błędy zastąpione". Następnie zaktualizowałem ui-router do wersji 0.3.1 i wciąż dostaję błędy. Następnie dodałem $ qProvider.errorOnUnhandledRejections (false) do mojego app.config ([$ qProvider] ... a teraz nie dostaję żadnych błędów Jednak pozostaje pytanie, ** czy to rozwiązało problem? * * Dzięki @Cengkuru Michael –