3

Je suis nouveau pour les tests unitaires de karma et j'ai rencontré ce problème à une application ionique simple.Karma Jasmine testing injecter ne fonctionne pas

Ceci est mon contrôleur:

angular.module('starter').controller('AccountCtrl', function ($scope) { 

    $scope.settings = { 
     enableFriends: true 
    }; 

    $scope.dummyFunction = function() { 
     console.log("Just do nothing!"); 
    } 
    }); 

Ceci est mon fichier de test unitaire:

describe('AccountCtrl', function() { 
    var scope, createController; 
    beforeEach(module('starter')); 
    console.log("0"); 

    beforeEach(function() { 
    console.log("1"); 
    }) 

    beforeEach(inject(function ($rootScope, $controller) { 
    console.log("2"); 
    scope = $rootScope.$new(); 
    controller = $controller('AccountCtrl', { 
     '$scope': scope 
    }); 
    })); 

    it('should do stuff', function() { 
    console.log("3"); 
    expect("Hello!").toBeDefined(); 
    }); 

}); 

A ce moment, quand je lance le test que j'obtiens ceci:

PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: 'WARNING: Tried to load angular more than once.' 

PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: '0' 

LOG: '1' 
LOG: '3' 
PhantomJS 2.1.1 (Mac OS X 0.0.0) AccountCtrl should do stuff FAILED 
    [email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:13696:24 
    [email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17883:12 
    [email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17805:30 
    [email protected]/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/angular-mocks/angular-mocks.js:2353:60 
    /Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17923:53 
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.004 secs/0.011 secs) 

Comme vous pouvez le voir à partir des messages console.log, la fonction d'injection n'est pas appelée et le problème est que je ne sais pas Pourquoi est-ce et pourquoi cela fait-il échouer mon test car le test attend la chaîne "Hello!" à définir, ce que c'est.

Si je supprime le beforeEach qui contient l'injection, le test est réussi.

Mon but est de faire un test qui vérifie que $ scope.dummyFunction() a été appelé et que $ scope.settings est défini. i.e. .:

it('should do stuff', function() { 
    var ctrl = controller(); 
    ctrl.dummyFunction(); 
    expect(ctrl.dummyFunction).toHaveBeenCalled(); 
    expect(ctrl.settings).toBeDefined();  
}); 

Répondre

0

Je suis nouveau test Node et je viens de résoudre le même problème que vous aviez. Si cela peut vous aider, je résous ce problème vérifier toutes les dépendances de l'application et les mettre dans le fichier de configuration du karma. Ensuite, je vérifie que toutes les dépendances ("dev" aussi) sont installées et exécutent le karma, et cela fonctionne! = D

J'espère que ça aide quelqu'un. =)