amis/__tests__/stores/service.test.ts

73 lines
2.0 KiB
TypeScript

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<any> = [];
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<any> = [];
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();
});