# #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'
}];