react-native - 如何使用 jest TypeError 正确模拟 react-native-firebase/数据库方法:无法读取未定义的属性“on”
问题描述
我正在使用 Jest 对我的 react-native 应用程序进行单元测试,并且在模拟数据库响应时遇到了问题。我得到TypeError: Cannot read property 'on' of undefined
了我的代码的结果,但不确定为什么它没有得到我的模拟值。
我的组件.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)
}
};
};
在 __ mocks __/@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'
}];
解决方案
推荐阅读
- scala - Scala:在迭代foreach循环中的项目时执行操作
- angular - Angular 在继续之前等待承诺解决
- visual-studio - Visual Studio for Mac 连接到 VSTS 项目
- javascript - 我需要帮助弄清楚为什么我在这个函数中得到 NaN
- algorithm - 如何找到物体所在位置的方位?
- java - 春季启动应用程序初始化时如何获得@FeignClient bean
- angular - 角度绑定在 vs 代码中不起作用
- python - jira-python...get_server_info=True...语法无效
- android - 从应用内购买的免费应用更改为付费应用
- java - Hibernate 5,Oracle12c Identity 列 - 未找到序列