TypeError:state.userInfo 在 Jest 测试中不可迭代
Posted
技术标签:
【中文标题】TypeError:state.userInfo 在 Jest 测试中不可迭代【英文标题】:TypeError: state.userInfo is not iterable in Jest Testing 【发布时间】:2020-07-29 19:53:28 【问题描述】:当我在我的一个 reducer 上运行我的笑话测试时,我不断收到这个 TypeError。似乎与找不到商店的状态有关?
这是我在减速器测试文件上运行 yarn test --coverage 时在控制台中遇到的确切错误:
控制台错误:
TypeError: state.userInfo is not iterable
63 | allDocumentComments: action.payload.allDocumentComments ? _.cloneDeep(action.payload.allDocumentComments) : null,
64 | userInfo: [
> 65 | ...state.userInfo,
| ^
66 | ...action.payload.userInfo
67 | ]
68 | ;
at _default (src/reducers/sopCommentsReducer.js:65:20)
at Object.test (src/tests/reducers/sopCommentsReducer.test.js:130:40)
这是我要通过的测试的减速器测试文件:
Reducer 测试文件:
import sopCommentsReducer from '../../reducers/sopCommentsReducer';
import * as mocks from '../../setupTests';
import _ from 'lodash';
// Testing tableActions.js reducer equivalents
describe('testing reducers to tableActions.js actions', () =>
const allDocumentComments =
'comement-string' :
_id: "5e792",
document_id: "1",
commenter_id: "2",
comment: "this is a comment",
resolved: false,
timestamp: "2020-03-23 21:31:36+00:00",
resolved_timestamp: "2020-03-24 17:36:15+00:00",
total_comments: 1,
replies: [
commenter_id: "3",
comment: "Reply",
timestamp: "2020-03-23 21",
],
;
const userAccountData = [
_id: "5e792",
msid: "alex",
roles: ["admin"],
email_address: "alex@yahoo.com",
family_name: "Pelo",
given_name: "Alex",
];
describe('testing addSOPComment action reducer', () =>
test('Returns the correct reducer result given the action', () =>
let expectedAction =
'payload':
'allDocumentComments': allDocumentComments,
'userInfo': userAccountData
,
'type': 'ADD_SOP_COMMENT'
;
let addSOPCommentReducerResult = sopCommentsReducer(mocks.mockFullStore, expectedAction);
expect(addSOPCommentReducerResult).toMatchSnapshot();
);
);
这是测试用例失败的reducer文件
缩小文件:
import
ADD_SOP_COMMENT,
from '../actions/types';
import _ from 'lodash';
const INITIAL_STATE =
allDocumentComments: ,
userInfo: [],
;
export default (state = INITIAL_STATE, action) =>
switch(action.type)
case ADD_SOP_COMMENT:
return
...state,
allDocumentComments: action.payload.allDocumentComments ? _.cloneDeep(action.payload.allDocumentComments) : null,
userInfo: [
...state.userInfo,
...action.payload.userInfo
]
;
default:
return state;
;
【问题讨论】:
你能提供一个codeandbox链接吗? 尝试打印您的state
,以确保其中包含的内容
【参考方案1】:
我也面临同样的问题。我可以分享我犯了什么错误以及我是如何解决的。
我在编写集成测试期间模拟 axios
请求时犯了一个错误。
例如:
假设一旦用户成功登录,我们将进行网络调用以获取愿望清单、购物车详细信息并初始化两者的状态。但是,在编写测试用例时,我们忘记模拟愿望清单/购物车的响应部分,在这种情况下,如果处理不正确,它可能会将状态初始化为 null
。
所以,这是错误,我通过更正模型解决了这个问题。请正确检查您的模型,也许您正在犯同样的错误。
【讨论】:
以上是关于TypeError:state.userInfo 在 Jest 测试中不可迭代的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代