2015-05-19 9 views
5

Mam config jak ten:

angular.module('myModule', ['ui.router']) 
.config(['$stateProvider', function($stateProvider) { 
    $stateProvider 
    .state('app.home', { 
     abstract: true, 
     url: '/home', 
     template: '<div>Foo Bar</div>' 
    }); 
}]); 

i testy jednostkowe używając jaśmin takiego:

'use strict'; 

describe('Module: myModule', function() { 
    var $rootScope, $state; 

    beforeEach(module('ui.router')); 
    beforeEach(module('myModule')); 

    beforeEach(inject(function(_$rootScope_, _$state_) { 
    $state = _$state_; 
    $rootScope = _$rootScope_; 
    })); 

    it('must have a route state for home', function(){ 
    console.log($state.get('app.home')); // this returns null 
    }); 
}); 

Jednak ja nie mogłem uzyskać stanu w konfiguracji, aby pokazać się w tablicy zwróconej przez $state.get() Sprawdziłem również i plik zawierający config jest załadowany i tam jest. Czy ktoś może powiedzieć, co robię źle? Zasadniczo po prostu chcę, aby sprawdzić, czy stany Oczekuję są istniejące w config z „mymodule”

Odpowiedz

9

Po pierwsze, nie trzeba tego

beforeEach(module('ui.router')); 

jak twój moduł wymienia go jako zależność już.

Domyślam się, że nie wprowadzasz stanu nadrzędnego app, więc twój stan app.home nie zostanie utworzony.

Wypowiedz stan app jest zdefiniowana w myAppModule, wystarczy zmienić linię module do

beforeEach(module('myAppModule', 'myModule')); 

Jeśli nie chcesz dołączyć moduł ze stanu app obejmować funkcję config przed Twój moduł, który tworzy fałszywy stan macierzysty. W tym celu musisz będzie musi zawierać ui.router.

beforeEach(module('ui.router', function($stateProvider) { 
    $stateProvider.state('app', { abstract: true }); 
}, 'myModule')); 

Alternatywnie, można szpiegować $stateProvider.state i użyć expect aby upewnić się, że został wywołany z app.home np

var $stateProvider; 

beforeEach(module('ui.router', function(_$stateProvider_) { 
    $stateProvider = _$stateProvider_; 
    spyOn($stateProvider, 'state'); 
}, 'myModule')); 

it('must have a route state for home', function() { 
    expect($stateProvider.state).toHaveBeenCalledWith('app.home', jasmine.any(Object)); 
}); 
+0

Tak, dodając państwa macierzystego „APP” nie wydaje się rozwiązać problem. Jednak dodanie drugiego modułu jako zależności nie zadziałałoby po mojej stronie. Jak mógłbym wyśmiać stan macierzysty tylko w teście jednostki, jeśli to możliwe? – reikyoushin

+0

Miło, wielkie dzięki! – reikyoushin

Powiązane problemy