react-native-navigation的迁移库

AppCommands.test.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import * as SimpleLayouts from './SimpleLayouts';
  2. import LayoutTreeParser from './LayoutTreeParser';
  3. import LayoutTreeCrawler from './LayoutTreeCrawler';
  4. import Store from '../containers/Store';
  5. import UniqueIdProvider from '../adapters/UniqueIdProvider.mock';
  6. import NativeCommandsSender from '../adapters/NativeCommandsSender.mock';
  7. import AppCommands from './AppCommands';
  8. describe('AppCommands', () => {
  9. let uut;
  10. let mockCommandsSender;
  11. let store;
  12. beforeEach(() => {
  13. mockCommandsSender = new NativeCommandsSender();
  14. store = new Store();
  15. uut = new AppCommands(mockCommandsSender, new LayoutTreeParser(), new LayoutTreeCrawler(new UniqueIdProvider(), store));
  16. });
  17. describe('setRoot', () => {
  18. it('sends setRoot to native after parsing into a correct layout tree', () => {
  19. uut.setRoot({
  20. container: {
  21. name: 'com.example.MyScreen'
  22. }
  23. });
  24. expect(mockCommandsSender.setRoot).toHaveBeenCalledTimes(1);
  25. expect(mockCommandsSender.setRoot).toHaveBeenCalledWith({
  26. type: 'ContainerStack',
  27. id: 'ContainerStack+UNIQUE_ID',
  28. data: {},
  29. children: [
  30. {
  31. type: 'Container',
  32. id: 'Container+UNIQUE_ID',
  33. children: [],
  34. data: {
  35. name: 'com.example.MyScreen'
  36. }
  37. }
  38. ]
  39. });
  40. });
  41. it('deep clones input to avoid mutation errors', () => {
  42. const obj = {};
  43. uut.setRoot({ container: { inner: obj } });
  44. expect(mockCommandsSender.setRoot.mock.calls[0][0].children[0].data.inner).not.toBe(obj);
  45. });
  46. it('passProps into containers', () => {
  47. expect(store.getPropsForContainerId('Container+UNIQUE_ID')).toEqual({});
  48. uut.setRoot(SimpleLayouts.singleScreenWithAditionalParams);
  49. expect(store.getPropsForContainerId('Container+UNIQUE_ID')).toEqual(SimpleLayouts.passProps);
  50. });
  51. it('returns a promise with the resolved layout', async () => {
  52. mockCommandsSender.setRoot.mockReturnValue(Promise.resolve('the resolved layout'));
  53. const result = await uut.setRoot({ container: { name: 'com.example.MyScreen' } });
  54. expect(result).toEqual('the resolved layout');
  55. });
  56. });
  57. });