import _ from 'lodash'; import {AppRegistry, Text} from 'react-native'; import React, {Component} from 'react'; import renderer from 'react-test-renderer'; class MyContainer extends Component { render() { const txt = `Hello, ${_.get(this.props, 'name', 'World')}!`; return ( {txt} ); } } describe('ComponentRegistry', () => { let uut; beforeEach(() => { AppRegistry.registerComponent = jest.fn(AppRegistry.registerComponent); uut = require('./ContainerRegistry'); }); function getRegisteredComponentClassFromAppRegistry() { return AppRegistry.registerComponent.mock.calls[0][1](); } it('registers container component by containerKey into AppRegistry', () => { expect(AppRegistry.registerComponent).not.toHaveBeenCalled(); uut.registerContainer('example.MyContainer.key', () => MyContainer); expect(AppRegistry.registerComponent).toHaveBeenCalledTimes(1); expect(AppRegistry.registerComponent.mock.calls[0][0]).toEqual('example.MyContainer.key'); }); it('wraps the container', () => { uut.registerContainer('example.MyContainer', () => MyContainer); const NavigationContainer = getRegisteredComponentClassFromAppRegistry(); const tree = renderer.create( ); expect(tree.toJSON().children).toEqual(['Hello, World!']); }); it('passes props from wrapper into original container', () => { uut.registerContainer('example.MyContainer', () => MyContainer); const NavigationContainer = getRegisteredComponentClassFromAppRegistry(); const tree = renderer.create( ); expect(tree.toJSON().children).toEqual(['Hello, Daniel!']); }); // //xit('updates props into original container', () => { //uut.registerContainer('example.MyContainer', () => MyContainer); // //const NavigationContainer = getRegisteredComponentClassFromAppRegistry(); // //class TestParent extends Component { // constructor(props) { // super(props); // this.state = {}; // } // // render() { // return ( // // ); // } //} // //let navContainerRef; //const NavigationContainer = getRegisteredComponentClassFromAppRegistry(); //const tree = renderer.create( // navContainerRef = r} name={_.get(navContainerRef, 'state.name')}/> //); //expect(tree.toJSON().children).toEqual(['Hello, World!']); //navContainerRef.setState({name: 'Gandalf'}); //expect(tree.toJSON().children).toEqual(['Hello, Gandalf!']); //}); });