2017-06-19 75 views
0

而我正在嘗試爲redux reducer做單元測試。但我正在努力接受相同的預期和相同的結果。Redux reducer單元測試

const initState = {}; 

export default function (state = initState, action) { 
    const newState = { ...state }; 
    switch (action.type) { 

    case CREATE_TYPE: 
     return { 
     ...state, 
     [action.customType.id]: { 
      ...action.customType 
     } 
     }; 
    default: 
     return state; 
    } 
} 

我的測試。似乎在customType: { id: 'test-id' }

describe('reducer',() => { 
    it('should return the initial state',() => { 
    const state = reducer(undefined, { type: 'unknown' }); 
    expect(state).toEqual({}); 
    }); 

    it('should handle CREATE_TYPE',() => { 
    expect(reducer({ test: true }, { 
     type: CREATE_TYPE, 
     customType: { id: 'test-id' }, 
     id: 'test-id' 
    })).toEqual({ 
     'test-id': 'test-type', 
     'test': true 
    }); 
    }); 
}); 

回答

2

通常它有助於拼出所有內容。

通過這種方式,您可以清楚地瞭解您的預期結果。

it('should handle CREATE_TYPE',() => { 
    const initialState = { test: true }; 
    const customType = { id: 'test-id' }; 
    const action = { 
    type: CREATE_TYPE, 
    customType: customType, 
    id: customType.id 
    }; 
    const result = reducer(initialState, action); 
    const expectedResult = { 
    test: true, 
    [customType.id]: customType 
    }; 
    expect(result).toEqual(expectedResult); 
}); 

然後,就可以更容易地看到問題的確切位置。

1

這個問題你exprecting從減速回:

{ 
    ...state, 
    [action.customType.id]: { 
     ...action.customType 
} 

它,如果你發送

{ 
    type: CREATE_TYPE, 
    customType: { id: 'test-id' }, 
    id: 'test-id' 
} 

將等於自己:

{ 
    ...state, 
    'test-id' : { id: 'test-id' } 
} 

你是eval uating它等於

我不知道你是如何期待通過您減速格式化你的狀態 - 但你的減速建立現在的方式將不提供您所期待的狀態。我不知道你在期待什麼,因爲我沒有在你提供的代碼中的任何其他地方看到節點或值「測試類型」。看起來你可能只是有一些語法錯誤?