2017-04-06 4 views
0

J'ai plusieurs suites de tests de jasmin et certaines d'entre elles utilisent un service que j'ai implémenté. Quels sont les comportements des services dans Jasmine. J'ai remarqué que lorsque je fais des tests sur mon service, ce que je fais affecte d'autres tests unitaires. Comme nous le savons, cela ne peut pas arriver parce que unitTests doit être complètement indépendant. à savoirComportement des services Jasmine

it('Given my service with list populated when cleanList then getList return empty list', function(){ 
    myService.populateList(_myData_); 
    expect(myService.getList().length).toBe(5); 
    myService.cleanList(); 
    expect(myService.getList().length).toBe(0); 
    expect(myService.getList()).toEqual([]); 
}); 

Si j'exécute que les tests avant un autre test dans d'autres décrivent dans un autre fichier complètement différent JS Script mon autre début de test échoue parce que je pense à utiliser cette liste, mais ce test population a nettoyé. Les services sont-ils ici un singleton comme dans mon application? Puis-je créer des instances indépendantes de ces services pour chaque suite de description?

Voici comment j'utilise ce type de services.

(function(){ 
    'use strict'; 
    var _data_ = require('../../../../json/dataMock.json'); 

    fdescribe('MyApp wizard:', function(){ 
    var controller, createController; 
    var modalInstance = { close: function(){}, dismiss: function(){} }; 
    var myService; 


    beforeEach(function(){ 
    angular.mock.module('myapp.ui.apps.wizard'); 
    angular.mock.module('myapp.ui.apps.wizard.service'); 
    }); 

    beforeEach(inject(function($injector, $controller, $rootScope, _$sce_, _myService_){ 
    myService = _myService_; 

    createController = function() { 
     return $controller('MaintenancesWizardController', { 
      $rootScope: $rootScope, 
      $uibModalInstance: modalInstance, 
      data: _data_, 
      $sce: _$sce_, 
      myService: _myService_ 
     }); 
    } 
    })); 

    it('this test fails if the one before is executed', function(){ 
    controller = createController(); 
    expect(myService.getList().length).toBe(5); 
    }); 
+0

essayez-vous de tester le myservice? vous pouvez utiliser un espion pour votre service afin qu'il n'appelle pas réellement le service et change la valeur. –

+0

@MukulJayaprakash Je viens de découvrir ce qui s'est passé! Lire ma réponse – acostela

Répondre

1

Je viens de découvrir au bout de quelques heures ce qui s'est passé. J'utilisais require pour importer mes données simulées. Lorsque j'utilise plusieurs imports, je ne me rappelle pas que les données sont stockées en mémoire. Donc, ma liste arrayList interne dans le service pointait vers la même mémoire que mes autres décrire la suite. J'ai utilisé l'importation pour le même fichier de données .json Mock. Je vais changer cela et le lire en utilisant 'fs'. A partir de maintenant, je recommande d'éviter d'exiger dans ces cas.