react-native-navigation-mock-render

Enzyme render mock of wix/react-native-navigation – super fast integration test! 🚀

MIT License

Downloads
11
Stars
5
Committers
1

Work in progress, stay tuned.

Thin node.js mock of wix/react-native-navigation that makes it possible to write fast integration test including:

  • rendering of screens
  • life cycle methods
  • navigation between screens

Uses:

Prerequisite

  • react-native >= 0.49
  • react >= 16.0.0

Example usage with Jest

yarn 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.

Limitations

Still early stages. First focus is apps using startSingleScreenApp.

Besides:

  • not all ScreenVisibilityListener have been implemented
  • not all Navigation methods have been implemented (e.g. startTabBasedApp, showContextualMenu)

Contributing

To get started, run:

yarn

When developing:

yarn run lint

License

MIT

Package Rankings
Top 20.94% on Npmjs.org
Badges
Extracted from project README
NPM Version Build Status MIT License PRs Welcome
Related Projects