Mocking versprochen basierte Anfrage mit Scherz

Ich versuche ein unit-test-eine Funktion, über Scherz, und ich habe einige Probleme beim Umgang mit Scherz-mock Module (das äquivalent von rewire oder proxyquire in nodejs Welt).

Ich bin wirklich versucht zu testen, hat ein Spion aufgerufen wurde verspottet-Modul mit einigen Parametern. Hier ist die Funktion, die ich testen möchte.

NB : den aktuellen test betrifft nur die "fetch (...)" - Teil, ich m versucht um zu testen, ob fetch aufgerufen wurde mit der guten parameter.

export const fetchRemote = slug => {
    return dispatch => {
        dispatch(loading());
        return fetch(Constants.URL + slug)
            .then(res => res.json())
            .then(cmp => {
                if (cmp.length === 1) {
                    return dispatch(setCurrent(cmp[0]));
                }
                return dispatch(computeRemote(cmp));
            });
    };
};

Die Funktion zurückgegeben wirkt wie ein Verschluss und so "fängt" den Knoten abgerufen wird und die externen module, die ich will, zu verspotten.

Hier ist der test ich m versuchen zu machen, pass-grün :

it('should have called the fetch function wih the good const parameter and slug', done => {
            const slug = 'slug';
            const spy = jasmine.createSpy();
            const stubDispatch = () => Promise.resolve({json: () => []});
            jest.mock('node-fetch', () => spy);
            const dispatcher = fetchRemote(slug);
            dispatcher(stubDispatch).then(() => {
                expect(spy).toHaveBeenCalledWith(Constants.URL + slug);
                done();
            });
        });

EDIT : Die erste Antwort hat mir sehr geholfen beim schreiben der test, ich habe jetzt die folgende :

it('should have called the fetch function wih the good const parameter and slug', done => {
            const slug = 'slug';
            const stubDispatch = () => null;
            const spy = jest.mock('node-fetch', () => Promise.resolve({json: () => []}));
            const dispatcher = fetchRemote(slug);
            dispatcher(stubDispatch).then(() => {
                expect(spy).toHaveBeenCalledWith(Constants.URL + slug);
                done();
            });
        });

Aber jetzt, hier ist die Fehlermeldung die ich habe :

 console.error node_modules/core-js/modules/es6.promise.js:117
      Unhandled promise rejection [Error: expect(jest.fn())[.not].toHaveBeenCalledWith()

      jest.fn() value must be a mock function or spy.
      Received:
        object: {"addMatchers": [Function anonymous], "autoMockOff": [Function anonymous], "autoMockOn": [Function anonymous], "clearAllMocks": [Function anonymous], "clearAllTimers": [Function anonymous], "deepUnmock": [Function anonymous], "disableAutomock": [Function anonymous], "doMock": [Function anonymous], "dontMock": [Function anonymous], "enableAutomock": [Function anonymous], "fn": [Function anonymous], "genMockFn": [Function bound getMockFunction], "genMockFromModule": [Function anonymous], "genMockFunction": [Function bound getMockFunction], "isMockFunction": [Function isMockFunction], "mock": [Function anonymous], "resetModuleRegistry": [Function anonymous], "resetModules": [Function anonymous], "runAllImmediates": [Function anonymous], "runAllTicks": [Function anonymous], "runAllTimers": [Function anonymous], "runOnlyPendingTimers": [Function anonymous], "runTimersToTime": [Function anonymous], "setMock": [Function anonymous], "unmock": [Function anonymous], "useFakeTimers": [Function anonymous], "useRealTimers": [Function anonymous]}]

InformationsquelleAutor mfrachet | 2016-10-17

Schreibe einen Kommentar