import { getSnapshot, getEnv, onSnapshot } from 'mobx-state-tree'; import { ServiceStore } from '../../src/store/service'; import { RendererStore } from '../../src/store'; import omit = require('lodash/omit'); test('store:ServiceStore', () => { const store = ServiceStore.create({ id: '1', storeType: ServiceStore.name }); expect(getSnapshot(store)).toMatchSnapshot(); }); test('store:ServiceStore fetchInitData success', async () => { const fetcher = jest.fn().mockImplementationOnce(() => Promise.resolve({ ok: true, data: { a: 1, b: 2 } })); const mainStore = RendererStore.create({}, { fetcher }); const states:Array = []; const store = ServiceStore.create({ id: '1', storeType: ServiceStore.name }); mainStore.addStore(store); onSnapshot(store, (snapshot) => states.push(snapshot)); await store.fetchInitData('/api/xxx'); const ignoreUdatedAt = states.map(snapshot => omit(snapshot, ['updatedAt'])); expect(ignoreUdatedAt).toMatchSnapshot(); expect(states.length).toBe(2); expect(states[1].updatedAt).not.toEqual(states[0].updatedAt); }); test('store:ServiceStore fetchInitData failed', async () => { const fetcher = jest.fn().mockImplementationOnce(() => Promise.reject('Network Error')); const notify = jest.fn(); const isCancel = jest.fn(() => false); const mainStore = RendererStore.create({}, { fetcher, notify, isCancel }); const states:Array = []; const store = ServiceStore.create({ id: '1', storeType: ServiceStore.name }); mainStore.addStore(store); onSnapshot(store, (snapshot) => states.push(snapshot)); await store.fetchInitData('/api/xxx'); expect(states).toMatchSnapshot(); expect(notify).toHaveBeenCalled(); expect(notify).toHaveBeenLastCalledWith("error", "Network Error"); expect(isCancel).toHaveBeenCalled(); });