2016-03-01 11 views
8

Mi chiedo come posso attivare/disattivare la funzione di stub su Jasmine se sto utilizzando importazioni/esportazioni ES6 con babel?Jasmine: come spiare la funzione importata/costruttore su ES6?

import MobileDetect from 'mobile-detect'; 
it('should spy MobileDetect',() => { 
    MobileDetect = jasmine.createSpy('MobileDetect'); 
});` 

Il primo problema è che non riesco a riscrivere il modulo di sola lettura

Modulo generazione non riuscita: SyntaxError: /Users/oleg/projects/rp/popup/lib/spec/popup.spec.js: "MobileDetect" is read-only

it('should spy MobileDetect',() => { 
    console.log(MobileDetect.prototype.constructor === MobileDetect); //true 
    spyOn(MobileDetect.prototype, 'constructor'); 
    console.log(MobileDetect.prototype.constructor === MobileDetect); //false 
});` 

ho provato questo approccio, ma non funziona troppo. .. MobileDetect.prototype.constructor spiato, ma MobileDetect non direttamente.

Cosa ne pensi di questo problema?

+0

Non è possibile spiare 'MobileDetect' perché il valore della variabile non può essere riscritto per una nuova funzione di spionaggio. La mia ipotesi: cosa succede se hai fatto 'var myMobileDetect = MobileDetect' e poi spiato su' myMobileDetect' invece? Ovviamente, avresti bisogno di cambiare il tuo codice per usare 'myMobileDetect', però. – apsillers

+1

Mi chiedo cosa stai cercando di ottenere nel tuo test. Stai cercando di creare una spia che imiti i metodi di 'MobileDetect'? (cioè una finta) –

risposta

1

Simile a proxyquire per il derisione delle dichiarazioni require() nei test, è possibile utilizzare babel-plugin-rewire per fare lo stesso con le importazioni ES6.

L'impostazione di prova potrebbe essere simile a questa;

import myModuleUnderTest from '../src/popup'; 

beforeEach(() => { 
    this.fakeMobileDetect = jasmine.createSpy(); 
    myModuleUnderTest.__Rewire__('MobileDetect', this.fakeMobileDetect); 
}); 

Quale è possibile ripristinare normale con;

afterEach(() => { 
    myModuleUnderTest.__ResetDependency__('MobileDetect'); 
}); 
Problemi correlati