import { EditViewController } from '@/core'; import { useEventBind, useNavParamsBind } from '@/hooks/use-view'; import { model } from './edit-view-controller-model'; const evt = useEventBind(emit); const mockId = new Date().getTime().toString(); const params: any = { name: model.name, model, evt, isLoadDefault: true, openType: 'ROUTE', pLoadingHelper: undefined, handler: undefined, }; const controller: any = new EditViewController(params); useNavParamsBind(controller, {}); const store = controller.getStore(); const ability: any = { load: () => { return { ok: true, data: { [model.entityCodeName.toLowerCase()]: mockId }, rowData: { status: 200 }, }; }, loadDraft: () => { return { ok: true, data: null, rowData: { status: 200 }, }; }, save: () => { return new Promise((resolve) => { resolve({ ok: true, data: { [model.entityCodeName.toLowerCase()]: mockId }, rowData: { status: 200 }, }); }); }, }; const spy = vi.spyOn(controller, 'getMainCtrlAbility').mockImplementation(() => ability); describe('EditViewController unit test', () => { const initViewActionState = () => { } const initViewActionStateSpy = vi.spyOn(controller, "initViewActionState").mockImplementation(initViewActionState); test('viewMounted', () => { const opt = {}; controller.viewMounted(opt); expect(emit).toHaveBeenCalled(); expect(emit).toHaveBeenCalledWith('view-mounted', model.name, opt); }); test('load', () => { const entityCodeName = model.entityCodeName.toLowerCase(); expect(controller.load()).toStrictEqual({ ok: true, data: null, rowData: { status: 200 }, }); expect(spy).toHaveBeenCalled(); expect(spy).toHaveReturnedWith(ability); // 添加主键 store.context[entityCodeName] = mockId; expect(controller.load()).toStrictEqual({ ok: true, data: { [entityCodeName]: mockId }, rowData: { status: 200 }, }); expect(spy).toHaveBeenCalled(); expect(spy).toHaveReturnedWith(ability); }); test('save', () => { const entityCodeName = model.entityCodeName.toLowerCase(); expect(controller.save()).resolves.toStrictEqual({ ok: true, data: { [entityCodeName]: mockId }, rowData: { status: 200 }, }); }); test('handleCtrlAction', async () => { const entityCodeName = model.entityCodeName.toLowerCase(); // 加载行为 const loadMockData = [{ [entityCodeName]: mockId, srfuf: '1', [model.majorPSAppDEField.toLowerCase()]: '测试加载行为数据主信息' }] const loadSpy = vi.spyOn(controller, 'handleFormLoad'); expect(await controller.handleCtrlAction('form', 'load', loadMockData)); expect(loadSpy).toHaveBeenCalled(); expect(loadSpy).toHaveBeenCalledWith(loadMockData); expect(controller.store).toHaveProperty('dataInfo', '测试加载行为数据主信息'); // 保存行为 const SaveMockData = [{ [entityCodeName]: mockId, srfuf: '1', [model.majorPSAppDEField.toLowerCase()]: '测试保存行为数据主信息' }] const saveSpy = vi.spyOn(controller, 'handleFormSave'); expect(await controller.handleCtrlAction('form', 'save', SaveMockData)); expect(saveSpy).toHaveBeenCalled(); expect(saveSpy).toHaveBeenCalledWith(SaveMockData); expect(controller.store).toHaveProperty('dataInfo', '测试保存行为数据主信息'); // 删除行为 const removeMockData = [{ [entityCodeName]: mockId, srfuf: '1', [model.majorPSAppDEField.toLowerCase()]: '测试删除行为数据主信息' }] const removeSpy = vi.spyOn(controller, 'handleFormRemove'); expect(await controller.handleCtrlAction('form', 'remove', removeMockData)); expect(removeSpy).toHaveBeenCalled(); expect(removeSpy).toHaveBeenCalledWith(removeMockData); }) });