From 330084d7f707a8a2aac2296936f955d083781307 Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 19 Oct 2021 10:21:13 +0800 Subject: [PATCH] test(Form): migrate some legacy test cases (#9696) --- .../test/__snapshots__/events.legacy.js.snap | 20 ----- .../test/__snapshots__/events.spec.tsx.snap | 32 ++++++++ packages/vant/src/form/test/events.legacy.js | 67 ----------------- packages/vant/src/form/test/events.spec.tsx | 66 ++++++++++++++++ packages/vant/src/form/test/index.legacy.js | 75 ------------------- packages/vant/src/form/test/index.spec.tsx | 71 +++++++++++++++++- packages/vant/src/form/test/shared.js | 31 -------- packages/vant/src/form/test/shared.tsx | 31 ++++++++ 8 files changed, 197 insertions(+), 196 deletions(-) delete mode 100644 packages/vant/src/form/test/__snapshots__/events.legacy.js.snap create mode 100644 packages/vant/src/form/test/__snapshots__/events.spec.tsx.snap delete mode 100644 packages/vant/src/form/test/events.legacy.js create mode 100644 packages/vant/src/form/test/events.spec.tsx delete mode 100644 packages/vant/src/form/test/index.legacy.js delete mode 100644 packages/vant/src/form/test/shared.js create mode 100644 packages/vant/src/form/test/shared.tsx diff --git a/packages/vant/src/form/test/__snapshots__/events.legacy.js.snap b/packages/vant/src/form/test/__snapshots__/events.legacy.js.snap deleted file mode 100644 index a20948ddc..000000000 --- a/packages/vant/src/form/test/__snapshots__/events.legacy.js.snap +++ /dev/null @@ -1,20 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`failed event 1`] = ` -
-
-
-
-
A failed
-
-
-
-
-
-
B failed
-
-
-
-`; diff --git a/packages/vant/src/form/test/__snapshots__/events.spec.tsx.snap b/packages/vant/src/form/test/__snapshots__/events.spec.tsx.snap new file mode 100644 index 000000000..b9aed125a --- /dev/null +++ b/packages/vant/src/form/test/__snapshots__/events.spec.tsx.snap @@ -0,0 +1,32 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should emit failed event when validating failed 1`] = ` +
+
+
+
+ +
+
+ A failed +
+
+
+
+
+
+ +
+
+ B failed +
+
+
+
+`; diff --git a/packages/vant/src/form/test/events.legacy.js b/packages/vant/src/form/test/events.legacy.js deleted file mode 100644 index e9af2642a..000000000 --- a/packages/vant/src/form/test/events.legacy.js +++ /dev/null @@ -1,67 +0,0 @@ -import { mountForm, submitForm, mountSimpleRulesForm } from './shared'; - -test('submit event', async () => { - const onSubmit = jest.fn(); - const wrapper = mountForm({ - template: ` - - - - - `, - methods: { - onSubmit, - }, - }); - - await submitForm(wrapper); - - expect(onSubmit).toHaveBeenCalledWith({ A: 'bar' }); -}); - -test('failed event', async () => { - const onFailed = jest.fn(); - const wrapper = mountSimpleRulesForm({ - methods: { - onFailed, - }, - }); - - await submitForm(wrapper); - - expect(wrapper.html()).toMatchSnapshot(); - expect(onFailed).toHaveBeenCalledWith({ - errors: [ - { name: 'A', message: 'A failed' }, - { name: 'B', message: 'B failed' }, - ], - values: { A: '', B: '' }, - }); -}); - -test('failed event when rule message is empty', async () => { - const onFailed = jest.fn(); - const wrapper = mountForm({ - template: ` - - - - - `, - data() { - return { - rulesA: [{ required: true }], - }; - }, - methods: { - onFailed, - }, - }); - - await submitForm(wrapper); - - expect(onFailed).toHaveBeenCalledWith({ - errors: [{ name: 'A' }], - values: { A: '' }, - }); -}); diff --git a/packages/vant/src/form/test/events.spec.tsx b/packages/vant/src/form/test/events.spec.tsx new file mode 100644 index 000000000..97c29b8d3 --- /dev/null +++ b/packages/vant/src/form/test/events.spec.tsx @@ -0,0 +1,66 @@ +import { mount } from '../../../test'; +import { submitForm, mountSimpleRulesForm } from './shared'; +import { Form } from '..'; +import { Field } from '../../field'; + +test('should emit submit event when submitting form', async () => { + const onSubmit = jest.fn(); + const wrapper = mount({ + render() { + return ( +
+ + + ); + }, + }); + + await submitForm(wrapper); + + expect(onSubmit).toHaveBeenCalledWith({ A: 'bar' }); +}); + +test('should emit failed event when validating failed', async () => { + const onFailed = jest.fn(); + const wrapper = mountSimpleRulesForm({ + methods: { + onFailed, + }, + }); + + await submitForm(wrapper); + + expect(wrapper.html()).toMatchSnapshot(); + expect(onFailed).toHaveBeenCalledWith({ + errors: [ + { name: 'A', message: 'A failed' }, + { name: 'B', message: 'B failed' }, + ], + values: { A: '', B: '' }, + }); +}); + +test('should emit failed event correctly when rule message is empty', async () => { + const onFailed = jest.fn(); + const wrapper = mount({ + render() { + return ( +
+ + + ); + }, + data() { + return { + rulesA: [{ required: true }], + }; + }, + }); + + await submitForm(wrapper); + + expect(onFailed).toHaveBeenCalledWith({ + errors: [{ name: 'A', message: '' }], + values: { A: '' }, + }); +}); diff --git a/packages/vant/src/form/test/index.legacy.js b/packages/vant/src/form/test/index.legacy.js deleted file mode 100644 index 4e97428d7..000000000 --- a/packages/vant/src/form/test/index.legacy.js +++ /dev/null @@ -1,75 +0,0 @@ -import { mountForm, submitForm } from './shared'; - -test('dynamic add/remove fileds', async () => { - const onSubmit = jest.fn(); - const wrapper = mountForm({ - template: ` - - - - - `, - data() { - return { list: ['A'] }; - }, - methods: { - onSubmit, - }, - }); - - await submitForm(wrapper); - expect(onSubmit).toHaveBeenCalledWith({ A: '' }); - - wrapper.setData({ list: ['A', 'B'] }); - - await submitForm(wrapper); - expect(onSubmit).toHaveBeenCalledWith({ A: '', B: '' }); - - wrapper.setData({ list: ['B'] }); - - await submitForm(wrapper); - expect(onSubmit).toHaveBeenCalledWith({ B: '' }); -}); - -test('dynamic add fileds when validate-first', async () => { - const onFailed = jest.fn(); - const wrapper = mountForm({ - template: ` - - - - - - `, - data() { - return { - show: false, - }; - }, - methods: { - onFailed, - }, - }); - - await submitForm(wrapper); - expect(onFailed.mock.calls[0][0].errors[0].name).toEqual('B'); - - wrapper.setData({ show: true }); - - await submitForm(wrapper); - expect(onFailed.mock.calls[1][0].errors[0].name).toEqual('A'); -}); diff --git a/packages/vant/src/form/test/index.spec.tsx b/packages/vant/src/form/test/index.spec.tsx index 36dcca3be..848379dfc 100644 --- a/packages/vant/src/form/test/index.spec.tsx +++ b/packages/vant/src/form/test/index.spec.tsx @@ -1,11 +1,11 @@ import { Form } from '..'; import { Field } from '../../field'; -import { mountForm } from './shared'; -import { later } from '../../../test'; +import { later, mount } from '../../../test'; +import { submitForm } from './shared'; test('should not reset validation after blurred when validate-trigger is onChange', async () => { const validator = (val: string) => val.length > 4; - const wrapper = mountForm({ + const wrapper = mount({ data() { return { value: '', @@ -34,3 +34,68 @@ test('should not reset validation after blurred when validate-trigger is onChang await input.trigger('blur'); expect(wrapper.find('.van-field__error-message').exists()).toBeTruthy(); }); + +test('should render correctly when dynamically add/remove fields', async () => { + const onSubmit = jest.fn(); + const wrapper = mount({ + render() { + return ( +
+ {this.list.map((item) => ( + + ))} + + ); + }, + data() { + return { list: ['A'] }; + }, + }); + + await submitForm(wrapper); + expect(onSubmit).toHaveBeenCalledWith({ A: '' }); + + await wrapper.setData({ list: ['A', 'B'] }); + await submitForm(wrapper); + expect(onSubmit).toHaveBeenCalledWith({ A: '', B: '' }); + + await wrapper.setData({ list: ['B'] }); + await submitForm(wrapper); + expect(onSubmit).toHaveBeenCalledWith({ B: '' }); +}); + +test('should validate first correctly when dynamically add field', async () => { + const onFailed = jest.fn(); + const wrapper = mount({ + render() { + return ( +
+ {this.show && ( + + )} + + + ); + }, + data() { + return { + show: false, + }; + }, + }); + + await submitForm(wrapper); + expect(onFailed.mock.calls[0][0].errors[0].name).toEqual('B'); + + await wrapper.setData({ show: true }); + await submitForm(wrapper); + expect(onFailed.mock.calls[1][0].errors[0].name).toEqual('A'); +}); diff --git a/packages/vant/src/form/test/shared.js b/packages/vant/src/form/test/shared.js deleted file mode 100644 index 4fbff62b6..000000000 --- a/packages/vant/src/form/test/shared.js +++ /dev/null @@ -1,31 +0,0 @@ -import { mount, later } from '../../../test'; - -export async function submitForm(wrapper) { - wrapper.find('.van-button').trigger('click'); - return later(); -} - -export function mountForm(options) { - return mount(options, { attachToDocument: true }); -} - -export function getSimpleRules() { - return { - rulesA: [{ required: true, message: 'A failed' }], - rulesB: [{ required: true, message: 'B failed' }], - }; -} - -export function mountSimpleRulesForm(options) { - return mountForm({ - template: ` - - - - - - `, - data: getSimpleRules, - ...options, - }); -} diff --git a/packages/vant/src/form/test/shared.tsx b/packages/vant/src/form/test/shared.tsx new file mode 100644 index 000000000..f66cfabc8 --- /dev/null +++ b/packages/vant/src/form/test/shared.tsx @@ -0,0 +1,31 @@ +import { mount, later } from '../../../test'; +import { Form } from '..'; +import { Field } from '../../field'; +import type { VueWrapper } from '@vue/test-utils'; + +export async function submitForm(wrapper: VueWrapper) { + await wrapper.find('form').trigger('submit'); + return later(); +} + +export function getSimpleRules() { + return { + rulesA: [{ required: true, message: 'A failed' }], + rulesB: [{ required: true, message: 'B failed' }], + }; +} + +export function mountSimpleRulesForm(options: any) { + return mount({ + render() { + return ( +
+ + + + ); + }, + data: getSimpleRules, + ...options, + }); +}