Rootcause ваш _goBack
является async
. Но вы не ждете, пока все закончится, прежде чем запустить expect
. Более того: Jest также не ждет завершения _goBack
, поэтому вы даже не видите ошибку
Невозможно прочитать свойство 'params' из неопределенного
это происходит потому, что вы не издеваетесь state
в navigation.params
.
Для работы с асинхронным кодом в Jest существует 2 различных подхода: либо возвращение Promise из it()
, либо запуск done()
обратного вызова вручную (он передается как 1-й аргумент в it()
).
Я выберу 2-е, так как это позволяет нам также ждать, пока goBack
не закончится перед запуском expect
:
describe('Testing navigation', () => {
let wrapper = null
const spyNavigate = jest.fn()
const props = {
navigation: {
navigate: spyNavigate,
state: {}
}
}
const params = {
token: 'randomToken'
}
beforeEach(() => {
wrapper = shallow(<CreateProduct {...props} />)
wrapper.setState({ params: params })
})
it('should test navigation', async () => {
await wrapper.instance()._goBack(params)
expect(spyNavigate).toHaveBeenCalled()
})
})
Или без использования async/await
это будет выглядеть как
it('should test navigation', () => {
return wrapper.
instance()._goBack(params).
then(() => expect(spyNavigate).toHaveBeenCalled());
})
выглядит грязно
Или с помощью done()
обратного вызова
it('should test navigation', (done) => {
wrapper.
instance()._goBack(params).
then(() => expect(spyNavigate).toHaveBeenCalled()).
then(done);
})