使用以“ 0”为前缀的Jest接收状态测试reducer:{在实际状态之前}

时间:2020-06-02 11:19:16

标签: reactjs redux react-redux jestjs enzyme

所以,我正在与Jest一起测试减速器,并且遇到以下错误

开玩笑的错误:

预期:[{“ assignedfrom”:“”,“ isLoggedIn”:false,“ username”:“”}, {“ assignedfrom”:“ test”}]

已收到:{“ 0”:{“ assignedfrom”:“”,“ isLoggedIn”:false,“用户名”:“”},“ assignedfrom”:“ test”}

注意:无论案件/诉讼类型如何,都将添加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;
   }

开玩笑的测试

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?是否有一种解决方案来获取不带前缀的正常状态?

1 个答案:

答案 0 :(得分:0)

测试不符合预期,意味着被测单元或测试本身存在错误。

在这种情况下,loggedReducer被滥用。期望在给定数组的同时将普通对象作为状态接收并返回普通对象。这会导致使用0键的普通对象和错误处理的assignedfrom键。

应该是:

  expect(
    loggedReducer(
      {
          username: '',
          isLoggedIn: false,
          assignedfrom: ''
      },
      {
        type: 'assign',
        payload:{
            assignedfrom:'test'
        }
      }
    )
  )
  ...