2014-04-04 15 views
10

Mam obiekt, który kpię z testów jednostkowych. Zasadniczo w moim pliku testowego I drwić go w następujący sposób:Globalnie fałszywy obiekt w angularjs do testowania jaśminu/karmy

var mockObject = { 
    mockMethod1 : function() {return true}, 
    mockMethod2 : function() {return true} 
}; 


beforeEach(module('myModule') , function ($provide) { 
    $provide.value('realObject',mockObject); 
}); 

Sposób rozumiem jak to jest, że ja przetestować funkcjonalność w moim moduł etc ... Gdziekolwiek która odwołuje się do „realObject” użyje mojej „mockObject”

Mój problem polega na tym, że zrobiłem wiele plików js do testowania i nie chcę definiować mojego "mockObject" w każdym z nich ... ani nie chcę go utrzymywać w więcej miejscach niż ja też .

Czy istnieje sposób przeniesienia mojego "mockObjact" do osobnego pliku, który zostanie włączony do pliku karma.conf.js, który spowoduje, że "mockObject" będzie dostępny do wstrzyknięcia w którymkolwiek z moich plików testowych ..... Im myślę zgodnie z tym, w jaki sposób można wprowadzić $ rootScope

Odpowiedz

3

Można zbudować usługę, w której mieści się Twoja próbka i wprowadzić tę usługę w każdym pliku testowym.

beforeEach(inject(function($rootScope, $controller, yourMockSvc) { 
    appScope = $rootScope.$new(); 
    appCtrl = $controller('AppController', { 
     $scope: appScope, 
     yourSvc: yourMockSvc 
    }); 
})); 
+0

Słyszę, dokąd zmierzasz, czyniąc usługę. Ale sposób, w jaki wyobraziłbym sobie, że jest czymś, w czym chciałbym móc ustawić coś na górze mojego testu, jak: var myMockObject = myService.getObject(); a następnie użyć tego obiektu próbnego w pozostałych testach. – Deslyxia

4

Można utworzyć globalną funkcję beforeEach jeśli jest napisane poza kontekstem konkretnego pakietu, ale nadal realizowany przez Jasmine, np utwórz niestandardowy plik do załadowania przez Karmę i zapisz swoją funkcję beforeEach bez zamykania go w funkcji opisywania.

Przykład:

var myGlobal; 

beforeEach(function() { 
    // This will run before any it function. 
    // Resetting a global state so the change in this function is testable 
    myGlobal = 10 
}); 

describe('first suite', function(){ 
    it('is a test', function(){ 
     expect(myGlobal).toBe(10); 
     // Set the value to show that beforeEach is executed for each it function 
     myGlobal = 20; 
     expect(myGlobal).toBe(20); 
    }); 

    it('is another test', function(){ 
     expect(myGlobal).toBe(10); 
     myGlobal = 30; 
     expect(myGlobal).toBe(30); 
    }); 
}); 

describe('second suite', function(){ 
    it('is a test', function(){ 
     expect(myGlobal).toBe(10); 
    }); 
}); 

See skrzypce here

+1

Tak, obecnie mam go napisany jako plik globalny w pliku testowym ... Problem polega na tym, że chcę użyć tego symulowanego obiektu w wielu plikach testowych i chcę zachować jak najmniej kopie tego obiektu, jak to możliwe. – Deslyxia

+0

Co to jest globalne? fałszywy obiekt? Czy $ dostarcza wartość usługi w wielu plikach? Skoro o to właśnie chodzi - dostarczenie wyśmiewanej wartości w jednym pliku dla wszystkich testów –

+0

Domyślam się, na czym nie mam pojęcia, jak dokładnie użyć polecenia $ provide, aby dostać się do funkcji w nowo utworzonej usłudze, która zwróci obiekt mockObject. to, co robiłem wcześniej, to po prostu tworzenie fałszywego obiektu w teście, a następnie użycie dostarczania. – Deslyxia

1

Wystarczy zdefiniować atrapa obiektu wewnątrz innego pliku i wyeksportować go. Powinieneś być w stanie użyć go w dowolnym pliku.