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