diff --git a/src/form/test/props.spec.js b/src/form/test/props.spec.js index 007d23bbc..eaa9ae407 100644 --- a/src/form/test/props.spec.js +++ b/src/form/test/props.spec.js @@ -1,6 +1,75 @@ import { mount, later } from '../../../test'; import { mountForm, getSimpleRules } from './shared'; +test('rules prop - execute order', async () => { + const onFailed = jest.fn(); + const wrapper = mountForm({ + template: ` + + + + + `, + data() { + return { + rules: [ + { required: true, message: 'A' }, + { validator: val => val.length > 6, message: 'B' }, + { validator: val => val !== 'foo', message: 'C' }, + ], + }; + }, + methods: { + onFailed, + }, + }); + + wrapper.find('.van-button').trigger('click'); + await later(); + + expect(onFailed).toHaveBeenCalledWith({ + errors: [{ message: 'B', name: 'A' }], + values: { A: '123' }, + }); +}); + +test('rules prop - async validator', async () => { + const onFailed = jest.fn(); + const wrapper = mountForm({ + template: ` + + + + + `, + data() { + return { + rules: [ + { + validator: () => new Promise(resolve => resolve(true)), + message: 'should pass', + }, + { + validator: () => new Promise(resolve => resolve(false)), + message: 'should fail', + }, + ], + }; + }, + methods: { + onFailed, + }, + }); + + wrapper.find('.van-button').trigger('click'); + await later(10); + + expect(onFailed).toHaveBeenCalledWith({ + errors: [{ message: 'should fail', name: 'A' }], + values: { A: '123' }, + }); +}); + test('validate-first prop', async () => { const onFailed = jest.fn(); const wrapper = mountForm({