2017-03-08 5 views
1

Ich versuche, die folgende Mock zu verwenden:Jest spöttischen Referenzfehler

const mockLogger = jest.fn(); 

jest.mock("./myLoggerFactory",() => (type) => mockLogger); 

aber mockLogger wirft einen Referenzfehler.

Ich weiß, Scherz versucht, mich davor zu schützen, außerhalb des Bereichs des Mocks zu erreichen, aber ich brauche einen Verweis auf jest.fn(), damit ich behaupten kann, dass es korrekt aufgerufen wurde.

Ich mache das nur spöttisch, weil ich einen Outside-In-Akzeptanztest einer Bibliothek mache. Ansonsten würde ich den Verweis auf den Logger den ganzen Weg hindurch als Parameter anstatt als Spott verwenden.

Wie kann ich das erreichen?

Antwort

2

Das Problem ist, dass zu Beginn der Datei zur Laufzeit gehisst werden, so dass const mockLogger = jest.fn(); danach ausgeführt wird.

Um es zu bekommen arbeiten Sie zuerst verspotten müssen, dann das Modul importieren und die reale Umsetzung des Spion gesetzt:

//mock the module with the spy 
jest.mock("./myLoggerFactory", jest.fn()); 
// import the mocked module 
import logger from "./myLoggerFactory" 

const mockLogger = jest.fn(); 
//that the real implementation of the mocked module 
logger.mockImplementation(() => (type) => mockLogger) 
+0

Vielen Dank. Ich wünschte, das Heben wäre offensichtlicher! –

0

ich letzte Antwort mit einem Beispiel-Code Arbeits verbessern wollen:

import { getCookie, setCookie } from '../../utilities/cookies'; 

jest.mock('../../utilities/cookies',() => ({ 
    getCookie: jest.fn(), 
    setCookie: jest.fn(), 
})); 
// Describe(''...) 
it('should do something',() => { 
    const instance = shallow(<SomeComponent />).instance(); 

    getCookie.mockReturnValue('showMoreInfoTooltip'); 
    instance.callSomeFunc(); 

    expect(getCookie).toHaveBeenCalled(); 
});