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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst einmal müssen Sie, um zurückzukehren ein Versprechen, wenn das testen von asynchronen code. Und die spy zurückkehren muss gelöst oder abgelehnt Versprechen.
Haben Sie versucht
expect(spy.mock)
stattexpect(spy)
?Und Sie haben die Rückkehr der dispatcher aus dem test.
Ich habe versucht, aber keinen Weg. Und es scheint, dass das node-Modul nicht verspottet überhaupt. Wenn ich meine test-ohne mein backend sendet es die Anfrage und werfen Fehler
Ok, so wie Sie importieren
fetch
in Ihrem Modul oder verwenden Sie das native JS-Implementierung?InformationsquelleAutor Andreas Köberle