Redux Toolkit: Как протестировать действия с помощью обратного вызова uid prepare - PullRequest
1 голос
/ 27 апреля 2020

В документах для тестирования возрастающих идентификаторов задач предполагается предполагаемый ответ.

В приведенном ниже примере генерируется уникальный идентификатор.

Как это можно проверить?

Этот тест пройден, но я не уверен, что он правильный, не следует ли определять идентификатор на основе что входит в подготовительный обратный вызов?

slice. js

add: {
    reducer: (state, {payload}: PayloadAction<{id: string, item: Item}>) => {
        state[payload.id] = payload.item
    },
    prepare: (item: Item) => ({
        payload: {id: cuid(), item}
    })
}

slice.test. js

it('should handle add', () => {
    expect(
        reducer(
            {},
            {
                type: actions.add,
                payload: {
                    id: 'id-here?',
                    item: {
                        other: 'properties...'
                    }
                },
            }
        )
    ).toEqual({
        'id-here?': {
            other: 'properties...'
        },
    })
})

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вы можете извлечь функцию подготовки, а также функцию редуктора в свою собственную константу, а затем протестировать подготовку в отдельности:

todosSlice. js:

[...]

let nextTodoId = 0;
export const addTodoPrepare = (text) => {
    return {
        payload: {
            text,
            id: nextTodoId++
        }
    }
}
export const addTodoReducer = (state,
                               action) => {
    const {id, text} = action.payload;
    state.push({
                   id,
                   text,
                   completed: false
               });
};

const todosSlice = createSlice({
                                   name: 'todos',
                                   initialState: [],
                                   reducers: {
                                       addTodo: {
                                           prepare: addTodoPrepare,
                                           reducer: addTodoReducer,
                                       },
                                   }
                               })

[...]

todosSlice.spe c. js:

import todos, {addTodo, addTodoPrepare} from './todosSlice'

describe('addTodoPrepare',
         () => {
             it('should generate incrementing IDs',
                () => {
                    const action1 = addTodoPrepare('a');
                    const action2 = addTodoPrepare('b');

                    expect(action1.payload).toEqual({
                                                        id: 0,
                                                        text: 'a'
                                                    })
                    expect(action2.payload).toEqual({
                                                        id: 1,
                                                        text: 'b'
                                                    })
                })
         })

describe('todos reducer',
         () => {
            [...]
         })
0 голосов
/ 28 апреля 2020

Для модульного тестирования, NO , просто протестируйте каждый редуктор независимо.

Для интеграционного тестирования и тестирования e2e, Да .

...