所以,我在使用Jest测试reducer的时候,得到了以下错误信息
错误。
预期的。[{"assignedfrom": "", "isLoggedIn": false, "username": ""},{"assignedfrom": "test"}]
收到。{"0": {"assignedfrom", "isLoggedIn": false, "username": {"0": {"assignedfrom": "", "isLoggedIn": false, "username": ""}, "assignedfrom": "test"},"isLoggedIn":false,"username":""},"assignedfrom":"test"}。
注:无论caseeaction类型如何,都会添加0。
我的减速器。
switch (action.type) {
case "login":
return {
...state,
username: action.payload.username,
isLoggedIn:action.payload.isLoggedIn
}
case "logout":
return{
...state,
username:action.payload.username,
isLoggedIn:action.payload.isLoggedIn
}
case "assign":
return{
...state,
assignedfrom:action.payload.assignedfrom
}
case "removeassign":
return{
...state,
assignedfrom:action.payload.assignedfrom
}
default:
return state;
}
Jest Test:
it('should return assignedRN ', () => {
expect(
loggedReducer(
[
{
username: '',
isLoggedIn: false, // initial state
assignedfrom: ''
}
],
{
type: 'assign',
payload:{
assignedfrom:'test' //action
}
}
)
).toEqual(
[
{
username: '',
isLoggedIn: false,
assignedfrom: ''
},
{
assignedfrom: 'test'
}
])
})
如果我把测试改成这样,它就会被通过。
it('should return assignedRN ', () => {
expect(
loggedReducer(
[
{
username: '',
isLoggedIn: false,
assignedfrom: ''
}
],
{
type: 'assign',
payload:{
assignedfrom:'test'
}
}
)
).toEqual(
{
'0':
{
username: '',
isLoggedIn: false,
assignedfrom: ''
}
,
assignedfrom: 'test',
}
)
})
那么,为什么要加上0呢?有什么办法可以不加前缀而得到正常状态?
测试不符合预期意味着要么是被测单元的错误,要么是测试本身的错误。
在这种情况下 loggedReducer
被误用。它被认为是作为一个状态接收plain对象,并返回plain对象,而一个数组被赋予。这就导致Plain对象与 0
键和错误处理 assignedfrom
钥匙。
应该是。
expect(
loggedReducer(
{
username: '',
isLoggedIn: false,
assignedfrom: ''
},
{
type: 'assign',
payload:{
assignedfrom:'test'
}
}
)
)
...