Шутка - издевательство над экспортом, кроме одного - PullRequest
0 голосов
/ 27 августа 2018

У меня есть файл с избыточностью, содержащий мой редуктор и все мои действия через именованный экспорт.

export const reducer = (state, action) => ...

export myAction = action => {
    return {type: 'ACTION', action}
}
...

Когда в моем тестовом файле я импортирую редуктор и действия. У меня есть renderWithRedux, который принимает редуктор и создает real store внутри.

function renderWithRedux(ui, reducer = combineReducers(reducers), initialState = {}) {
    const store = createStore(reducer, initialState)
    const utils = render(<Provider store={store}>{ui}</Provider>)

    return {
        ...utils,
        store,
    }
}

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

export default connect(mapStateToProps, { myAction })(MyComponent)

Я хочу смоделировать myAction в моем конкретном случае использования, это действие на самом деле было бы громом, и я хочу посмотреть, обновился ли магазин.

Проблема у меня в том, как мне издеваться над моим действием, а не редуктором. Я пробовал

jest.mock('./reducerFile', () => {
    return jest.fn().mockImplementation(() => {
        return {
            reducer: require.requireActual('./reducerFile').reducer,
            myAction: jest.fn()
        }
    })
})

Но редуктор все еще каким-то образом издевается.

Это вообще возможно, или я просто жажду странствий.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Вы можете сделать что-то, как я, в вашем тестовом файле:

const yourModule = require('../path/to/yourModule');

yourModule.myFn = jest.fn();

Это будет издеваться над именованной функцией экспорта в вашем модуле.

0 голосов
/ 28 августа 2018

К сожалению, вам не повезло. Шутка издевается над всем модулем. Невозможно частично смоделировать файл. Лично я бы порекомендовал разделить файл, чтобы облегчить вам тестирование.

См. Это обсуждение на github для подробного объяснения, почему: https://github.com/facebook/jest/issues/936

...