Тестирование повторного выбора селекторов - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь протестировать селектор реагирования / повторного выбора, который будет фильтровать массив и возвращать только активных клиентов. Моя проблема связана с immutableJS.

Селектор:

const selectClients = state => state.get('clients', initialState)

const makeSelectInactiveClients = () => createSelector(
  makeSelectClients(),
  clients => clients.filter(c => c.inactive)
)

Тест:

describe('Active and not active client selectors', () => {
  const activeClients = [
    { id: 1, name: 'Client 1' },
    { id: 2, name: 'Client 2' },
  ]
  const inactiveClients = [
    { id: 1, name: 'Client 3', inactive: true },
    { id: 2, name: 'Client 4', inactive: true },
  ]
  const clients = [
    { id: 1, name: 'Client 1' },
    { id: 2, name: 'Client 2' },
    { id: 1, name: 'Client 3', inactive: true },
    { id: 2, name: 'Client 4', inactive: true },
  ]

  describe('#makeSelectActiveClients', () => {
    const activeClientsSelector = selectors.makeSelectActiveClients()

    it('only returns active clients', () => {
      const mockedState = fromJS({
        clients: {
          loading: false,
          clients: clients,
        },
      })


      expect(activeClientsSelector(mockedState)).toEqual(activeClients)
    })
  })
})

Разбавление:

export default function ClientsReducer(state = initialState, action) {
  switch (action.type) {
    case FETCH_CLIENTS:
      return state.set('loading', true)
    case SET_CLIENTS:
      return state
        .set('loading', false)
        .set('clients', action.clients)
    default:
      return state
  }
}

Проблема в том, что когда редуктор устанавливает клиентский массив, он устанавливает план JS-массива. Однако, когда этот массив установлен в моем тесте с использованием ImmutableJS, он устанавливается как неизменный объект и не имеет неактивного объекта без использования ключевого слова get.

Должен ли я звонить toJS в моем редукторе, как это?

return state
  .set('loading', false)
  .set('clients', fromJS(action.clients))

, а затем использовать ключевое слово get в селекторах для доступа к свойствам объектов-членов клиентов?

или я должен что-то делать по-другому в моем тесте?

1 Ответ

0 голосов
/ 31 октября 2018

Попробуйте позвонить fromJS на activeClients в тестовом утверждении:

expect(activeClientsSelector(mockedState)).toEqual(fromJS(activeClients))
...