import React, { Component } from 'react'; import { AppRegistry, Text } from 'react-native'; import renderer from 'react-test-renderer'; import ContainerRegistry from './ContainerRegistry'; import Store from './Store'; describe('ContainerRegistry', () => { let uut; let store; class MyContainer extends Component { render() { return {'Hello, World!'}; } } beforeEach(() => { store = new Store(); AppRegistry.registerComponent = jest.fn(AppRegistry.registerComponent); uut = new ContainerRegistry(store); }); it('registers container component by containerName into AppRegistry', () => { expect(AppRegistry.registerComponent).not.toHaveBeenCalled(); uut.registerContainer('example.MyContainer.name', () => MyContainer); expect(AppRegistry.registerComponent).toHaveBeenCalledTimes(1); expect(AppRegistry.registerComponent.mock.calls[0][0]).toEqual('example.MyContainer.name'); }); it('saves the original container into the store', () => { expect(store.getOriginalContainerClassForName('example.MyContainer.name')).toBeUndefined(); uut.registerContainer('example.MyContainer.name', () => MyContainer); const Class = store.getOriginalContainerClassForName('example.MyContainer.name'); expect(Class).not.toBeUndefined(); expect(Class).toEqual(MyContainer); expect(Object.getPrototypeOf(Class)).toEqual(Component); }); it('resulting in a normal component', () => { uut.registerContainer('example.MyContainer.name', () => MyContainer); const Container = AppRegistry.registerComponent.mock.calls[0][1](); const tree = renderer.create(); expect(tree.toJSON().children).toEqual(['Hello, World!']); }); });