2014-04-04 12 views
10

Ho un oggetto che sto simulando per il test dell'unità. In sostanza nel mio file di test ho mock come segue:Oggetto fittizio a livello globale in angularjs per il test del gelsomino/karma

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


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

Il modo in cui ho capito è che, come ho prova di funzionalità nel mio modulo ecc ... da nessuna parte che fa riferimento al "realObject" sarà utilizzare il mio "MockObject"

Il mio problema è che ho creato più file js per il test e non voglio definire il mio "mockObject" in ognuno di essi ... né voglio mantenerlo in più posti di quello che ho anch'io .

C'è un modo per spostare il mio "mockObjact" in un file separato che viene incluso in karma.conf.js che renderà il "mockObject" disponibile per l'iniezione in uno qualsiasi dei miei file di test ..... Sto pensando sulla falsariga di come si inietta $ rootScope

risposta

3

È possibile creare un servizio che ospita la propria simulazione e iniettare tale servizio in ciascun file di test.

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

ho sentito dove stai andando a renderlo un servizio. Ma il modo in cui immaginerei è qualcosa in cui vorrei essere in grado di impostare qualcosa nella parte superiore del mio test come: var myMockObject = myService.getObject(); e poi usare quell'oggetto simulato nel resto dei test – Deslyxia

4

È possibile creare una funzione di beforeeach globale se è scritto al di fuori del contesto di una suite specifica, ma ancora eseguito da Jasmine, per esempio creare un file personalizzato da caricare da Karma e scrivere la funzione beforeEach lì senza racchiuderla in una funzione descriva.

Esempio:

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 violino here

+1

Sì, ho già scritto come globale in un file di test ... il problema è che voglio usare questo oggetto fittizio in più file di test e voglio mantenere il minor numero possibile copie di questo oggetto il più possibile – Deslyxia

+0

Qual è il globale? l'oggetto finto? Sei $ fornendo il valore del servizio in più file? Dato che la risposta è la seguente: fornire il valore deriso in un singolo file per tutti i test –

+0

Immagino che ciò che non è chiaro su sia esattamente come utilizzare $ fornire per ottenere la funzione nel servizio appena creato che restituirà il mockObject. quello che stavo facendo prima stava solo creando l'oggetto fittizio nel test e poi usando fornire. – Deslyxia

1

Basta definire il tuo oggetto fittizio all'interno di un altro file ed esportarlo. Dovresti essere in grado di usarlo in qualsiasi file.

Problemi correlati