Как правильно издеваться над методами react-native-firebase/базы данных, используя ошибку типа jest: Не удается прочитать свойство «включено» неопределенного

# #react-native #unit-testing #jestjs #mocking #react-native-firebase

Вопрос:

Я модульно тестирую свое приложение react-native, используя Jest, и у меня возникают проблемы с имитацией ответа базы данных. Я получаю TypeError: Cannot read property 'on' of undefined в результате своего кода и не уверен, почему он не получает мои фиктивные значения.

MyComponent.js

 export const myMethod = (myUserId) => {
    return async dispatch => {
        console.log('getting data.... ')
        let loadedData = [];
        try{
            
            await database().ref('/myPath/'   myUserId).limitToLast(3).on('value', (snapshot) => {
                console.log('snapshot  '   JSON.stringify(snapshot.val()))
                loadedData = snapshot.val(); 
                console.log('loadedData  '   JSON.stringify(loadedData))
                let objArr = Utils.getArrayOfObjs(loadedData);
                objArr.sort(Utils.compareDatesDesc);
                console.log('objArr  '   JSON.stringify(objArr))
                 dispatch({ 
                    type: LOAD_DATA,
                    myData: objArr,
                }); 
            });   
           
        }catch(err){
            console.log('err: '   err)
        }
    };
};
 

На __ издевается __/@react-native-firebase/database.js У меня есть:

 export default () => ({
    

    ref: jest.fn().mockReturnThis(),
    on: jest.fn((eventType, callback) => {
        const data = {
            "1234":{
               "length":"21",
               "userId":"xx01"
            }
        };

        const snapshot = { val: () => data, exportVal: () => data, exists: jest.fn(() => true) };

        console.log('snapshot: '   JSON.stringify(snapshot))
        return callback(snapshot)
    
    }),
    limitToLast: jest.fn()
  });
 

MyComponent-test.js

 import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'

const middlewares = [thunk]
const mockStore = configureMockStore(middlewares)

test('successful LoadData', async () => {
    const store = mockStore({ user: {} })

    const expectedActionResult = [{
        myData:[{
            "length":"21",
            "userId":"xx01"
        }],
        type: 'LOAD_DATA'
    }];