Enzyme render mock of wix/react-native-navigation – super fast integration test! 🚀
MIT License
Work in progress, stay tuned.
Thin node.js mock of wix/react-native-navigation that makes it possible to write fast integration test including:
Uses:
react-native
>= 0.49react
>= 16.0.0yarn add --dev react-native-navigation-mock-render jsdom@^11.5.1 enzyme@^3.3.0 enzyme-adapter-react-16@^1.1.1 react-native-mock-render@^0.0.19
Besides you need a version of react-dom
matching your version of react
.
import { Navigation } from 'react-native-navigation'
import 'react-native-navigation-mock-render/setup/enzyme-environment'
import { getEnzymeAppWrapper } from 'react-native-navigation-mock-render/mock/platform'
import { IntroScreen } from '../screens/Intro'
import startApp from '../index'
jest.mock('react-native-navigation/src/deprecated/platformSpecificDeprecated', () =>
require.requireActual('react-native-navigation-mock-render/mock/platform')
)
jest.mock('react-native-navigation/src/ScreenVisibilityListener', () =>
require.requireActual(
'react-native-navigation-mock-render/mock/ScreenVisibilityListener'
)
)
const wrapper = getEnzymeAppWrapper()
const flushAllPromises = () =>
new Promise(resolve => setImmediate(resolve))
describe('app integration test', () => {
it('shows main screen after stepping through intro', async () => {
startApp()
await flushAllPromises()
let screenId = await Navigation.getCurrentlyVisibleScreenId()
expect(screenId).toEqual('MyApp.Intro')
const introInstance = wrapper
.find(IntroScreen)
.first()
.instance()
introInstance.onAcceptTermsPressed()
await flushAllPromises()
screenId = await Navigation.getCurrentlyVisibleScreenId()
expect(screenId).toEqual('MyApp.MainScreen')
})
})
See more inside the example/__tests__
folder.
Still early stages. First focus is apps using startSingleScreenApp
.
Besides:
ScreenVisibilityListener
have been implementedNavigation
methods have been implemented (e.g. startTabBasedApp
, showContextualMenu
)To get started, run:
yarn
When developing:
yarn run lint
MIT