6
votes

UI Routeur Extras brise mes tests de l'unité avec une erreur de résultats inattendue?

Question:

- Pourquoi mes tests échouent-ils lorsque des extras d'UI-Router-extras (non normal UI-routeur) sont installés?

- Comment puis-je utiliser ui-routeur-extras et toujours mes tests?


si vous souhaitez installer Cela utilise rapidement Yeoman + Angular-Fullstack-Generator + Bower Install UI-Router-Extras

J'ai trouvé un problème similaire avec UI-routeur normal .

  • Hyd> Hy-Router Normal fonctionne bien avec mes tests.
  • Après avoir installé UI-Router-Extras Je reçois un < forte> erreur

    journal d'erreur

    si je désinstallez ui-router.extras Ce test passe juste bien: Entrez la description de l'image ici

    Mise à jour pour avant URLROUTERProvider test Heres mon test: xxx

    voici mon karma.conf xxx


1 commentaires

Je trouve qu'il est plus facile de tester les contrôleurs, les services, les directives, etc. S'ils sont dans des modules avec aussi peu de dépendances que possible. S'il est possible, créez un module racine que vous apportez votre uirouter et votre uirouterextras. Vous pouvez ensuite supprimer la dépendance du module contenant le contrôleur que vous essayez de tester.


4 Réponses :


1
votes

1) Votre test est en échec car ui-routeur-extras fait une demande d'obtention http inattendue à app / principal / main.html est donc le test échoue.

2) En fait, il y a beaucoup de suggestions dans la question que vous avez liée à. Je suppose que l'appel supplémentaire est effectué pour charger le modèle de route par défaut, c'est-à-dire. sinon . Donc, le remplacement peut résoudre le problème: xxx


2 commentaires

Ouais j'ai essayé ceci ... je vais mettre à jour ma réponse avec mes modifications mais que vous obtenez toujours la même erreur.


Peut-être que vous pourriez en prendre un autre coup d'oeil et voir si c'est une erreur factice



10
votes

Cela pourrait être le résultat d'un composant ayant une dépendance à l'état $ code> auquel cas $ State code> sera instancié et une route par défaut sera exécutée. C'est pourquoi un modèle d'un de vos contrôleurs main.html code> est récupéré.

Pour contourner cela, remplacer Go () code> et transitionTo () code> de $ State code> Méthodes avec les mannequins: P>

beforeEach( inject( function ( _$state_ ) {
        state = _$state_;
        spyOn( state, 'go' );
        spyOn( state, 'transitionTo' );
    } ) );


3 commentaires

Amey c'est correct. Comment dans le monde êtes-vous venu le savoir? Travaillé avec angulaire pendant environ 8 mois maintenant et je suis totalement nouveau à tester. Plus je vais, plus je découvre que je ne sais rien. Avez-vous des recommandations pour vous rendre à votre niveau? En particulier pour les tests E2E et des unités?


@Amery est correct, UI-Router-Extras initialise le service $ State qui provoque la chargement de votre route par défaut et demande le modèle par URL. Voir ci-dessous pour une réponse alternative à l'aide de $ URLROUTERProvider.deferterInterC () .


$ URLROUTERPROVIDER.DEFERTINITINITINITING () est utilisé pour empêcher de demander l'état configuré "sinon" et ne résout pas le problème de l'OP.



4
votes

Voici une solution alternative qui ne peut pas Nuke UI-Router's TransitionTo Fonction CODE>.


Premièrement, le scénario d'échec peut être reproduit en suivant ces étapes: P>

beforeEach(module('uiRouterExtrasKarmaBugApp'));
// Add the following line
beforeEach(module(function($urlRouterProvider) { $urlRouterProvider.deferIntercept(); }));


0 commentaires

1
votes

Il y a deux solutions réellement ... juste après la déclaration du module.

  1. Vous pouvez ajouter:

    avant précédent (module ('stateMock'));

  2. ou vous pouvez manuellement, différer l'interception:

    avant (MODULE (fonction ($ ($ urlrouterprovider) {$ urlrouterprovider.deferterinting ();}));


0 commentaires