Ich versuche jest
zu verwenden, um Anrufe zu firebase
zu testen. Firebase ist ein Online-Datenbankdienst von Google. Ich spöttisch das firebase
Modul wie untenJest Test beendet, bevor die mokierte Firebase-Funktion aufgerufen wird und daher fehlschlägt
'use strict';
const firebase = jest.genMockFromModule('firebase');
const ref = jest.fn(() => {
return {
child: jest.fn(() => {
return ref
}),
update: jest.fn(() => {
console.log('Called update')
return Promise.resolve()
})
}
})
firebase.initializeApp = jest.fn()
firebase.database = jest.fn(() => {
return {
ref: ref
}
})
module.exports = firebase
Ich bin nur die Funktionen spöttisch, die ich im Moment testen müssen. Unten ist mein Testfall.
it('+++ actionCreator addAlarm',() => {
const store = mockStore(initialState)
store.dispatch(ActionCreators.addAlarm(alarm));
// Make sure that the scheduleNotifications API is called
expect(scheduleNotifications).toHaveBeenCalled();
expect(firebase.initializeApp).toHaveBeenCalled();
expect(firebase.database().ref().update).toHaveBeenCalled();
});
Die letzte Zeile im Testfall versucht, um sicherzustellen, dass ich die firebase
update
Funktion nenne, die verspottet wird.
Im Folgenden finden Sie die Konsolenausgabe
abcs-MBP-2:GalarmApp abc$ npm test
> [email protected] test /Users/abc/Projects/GalarmApp
> jest
FAIL __tests__/actionsSpecs.js
● >>>A C T I O N --- Test galarm actions: › +++ actionCreator addAlarm
expect(jest.fn()).toHaveBeenCalled()
Expected mock function to have been called.
at Object.<anonymous> (__tests__/actionsSpecs.js:58:52)
at tryCallTwo (node_modules/promise/lib/core.js:45:5)
at doResolve (node_modules/promise/lib/core.js:200:13)
at new Promise (node_modules/promise/lib/core.js:66:3)
at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
at tryCallOne (node_modules/promise/lib/core.js:37:12)
at node_modules/promise/lib/core.js:123:15
>>>A C T I O N --- Test galarm actions:
✕ +++ actionCreator addAlarm (8ms)
✓ +++ actionCreator setConnectionStatus (4ms)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 passed, 2 total
Snapshots: 1 passed, 1 total
Time: 1.989s, estimated 2s
Ran all test suites.
console.warn node_modules/rn-host-detect/index.js:45
[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()
console.log __mocks__/firebase.js:11
Called update
Der Testfall ist auf der Linie versagt, wo ich überprüfen, ob die update
Funktion aufgerufen wird. Wenn Sie in der Konsolenausgabe nach unten schauen, werden Sie sehen, dass die Called update
Konsole vorhanden ist, was bedeutet, dass die Update-Funktion aufgerufen wird, aber sie wird aufgerufen, nachdem der Testfall fehlgeschlagen ist.
Dies ist die addAlarm
Aktion, die eine Aktion Thunk ist
const addAlarm = (alarm) => (dispatch, getState) => {
if(alarm.status) {
NotificationManager.scheduleNotifications(alarm);
}
const alarmObjForFirebase = this.createAlarmObjForFirebase(alarm)
firebaseRef.update(alarmObjForFirebase)
}
Der Aufruf von firebase
update
Funktion nicht asynchron so weit geschieht wie ich sie verstehe.
Bitte lassen Sie mich wissen, wenn Sie Hinweise haben, wie ich dieses Problem beheben kann.