使用Jest接收前缀为 "0 "的状态来测试reducer。{在实际状态之前}

问题描述 投票:0回答:1

所以,我在使用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呢?有什么办法可以不加前缀而得到正常状态?

reactjs redux react-redux jestjs enzyme
1个回答
0
投票

测试不符合预期意味着要么是被测单元的错误,要么是测试本身的错误。

在这种情况下 loggedReducer 被误用。它被认为是作为一个状态接收plain对象,并返回plain对象,而一个数组被赋予。这就导致Plain对象与 0 键和错误处理 assignedfrom 钥匙。

应该是。

  expect(
    loggedReducer(
      {
          username: '',
          isLoggedIn: false,
          assignedfrom: ''
      },
      {
        type: 'assign',
        payload:{
            assignedfrom:'test'
        }
      }
    )
  )
  ...
© www.soinside.com 2019 - 2024. All rights reserved.