form.spec.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. import { createVue, destroyVM } from '../util';
  2. const DELAY = 50;
  3. describe('Form', () => {
  4. let vm;
  5. let hasPromise = true;
  6. before(() => {
  7. if (!window.Promise) {
  8. hasPromise = false;
  9. window.Promise = require('es6-promise').Promise;
  10. }
  11. });
  12. after(() => {
  13. if (!hasPromise) {
  14. window.Promise = undefined;
  15. }
  16. });
  17. afterEach(() => {
  18. destroyVM(vm);
  19. });
  20. it('label width', done => {
  21. vm = createVue({
  22. template: `
  23. <el-form ref="form" :model="form" label-width="80px">
  24. <el-form-item label="活动名称">
  25. <el-input v-model="form.name"></el-input>
  26. </el-form-item>
  27. </el-form>
  28. `,
  29. data() {
  30. return {
  31. form: {
  32. name: ''
  33. }
  34. };
  35. }
  36. }, true);
  37. expect(vm.$el.querySelector('.el-form-item__label').style.width).to.equal('80px');
  38. expect(vm.$el.querySelector('.el-form-item__content').style.marginLeft).to.equal('80px');
  39. done();
  40. });
  41. it('inline form', done => {
  42. vm = createVue({
  43. template: `
  44. <el-form ref="form" :model="form" inline>
  45. <el-form-item>
  46. <el-input v-model="form.name"></el-input>
  47. </el-form-item>
  48. <el-form-item>
  49. <el-input v-model="form.address"></el-input>
  50. </el-form-item>
  51. </el-form>
  52. `,
  53. data() {
  54. return {
  55. form: {
  56. name: '',
  57. address: ''
  58. }
  59. };
  60. }
  61. }, true);
  62. expect(vm.$el.classList.contains('el-form--inline')).to.be.true;
  63. done();
  64. });
  65. it('label position', done => {
  66. vm = createVue({
  67. template: `
  68. <div>
  69. <el-form :model="form" label-position="top" ref="labelTop">
  70. <el-form-item>
  71. <el-input v-model="form.name"></el-input>
  72. </el-form-item>
  73. <el-form-item>
  74. <el-input v-model="form.address"></el-input>
  75. </el-form-item>
  76. </el-form>
  77. <el-form :model="form" label-position="left" ref="labelLeft">
  78. <el-form-item>
  79. <el-input v-model="form.name"></el-input>
  80. </el-form-item>
  81. <el-form-item>
  82. <el-input v-model="form.address"></el-input>
  83. </el-form-item>
  84. </el-form>
  85. </div>
  86. `,
  87. data() {
  88. return {
  89. form: {
  90. name: '',
  91. address: ''
  92. }
  93. };
  94. }
  95. }, true);
  96. expect(vm.$refs.labelTop.$el.classList.contains('el-form--label-top')).to.be.true;
  97. expect(vm.$refs.labelLeft.$el.classList.contains('el-form--label-left')).to.be.true;
  98. done();
  99. });
  100. it('show message', done => {
  101. vm = createVue({
  102. template: `
  103. <el-form :model="form" ref="form">
  104. <el-form-item label="活动名称" prop="name" :show-message="false"
  105. :rules="{
  106. required: true,
  107. message: '请输入活动名称',
  108. trigger: 'change',
  109. min: 3,
  110. max: 6
  111. }"
  112. >
  113. <el-input v-model="form.name"></el-input>
  114. </el-form-item>
  115. </el-form>
  116. `,
  117. data() {
  118. return {
  119. form: {
  120. name: ''
  121. }
  122. };
  123. }
  124. }, true);
  125. vm.$refs.form.validate(valid => {
  126. expect(valid).to.not.true;
  127. vm.$refs.form.$nextTick(_ => {
  128. expect(vm.$el.querySelector('.el-form-item__error')).to.not.exist;
  129. done();
  130. });
  131. });
  132. });
  133. it('reset field', done => {
  134. vm = createVue({
  135. template: `
  136. <el-form ref="form" :model="form" :rules="rules">
  137. <el-form-item label="活动名称" prop="name">
  138. <el-input v-model="form.name" ref="fieldName"></el-input>
  139. </el-form-item>
  140. <el-form-item label="活动地址" prop="address">
  141. <el-input v-model="form.address" ref="fieldAddr"></el-input>
  142. </el-form-item>
  143. <el-form-item label="活动性质" prop="type">
  144. <el-checkbox-group v-model="form.type">
  145. <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
  146. <el-checkbox label="地推活动" name="type"></el-checkbox>
  147. <el-checkbox label="线下主题活动" name="type"></el-checkbox>
  148. <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
  149. </el-checkbox-group>
  150. </el-form-item>
  151. </el-form>
  152. `,
  153. data() {
  154. return {
  155. form: {
  156. name: '',
  157. address: '',
  158. type: []
  159. },
  160. rules: {
  161. name: [
  162. { required: true, message: '请输入活动名称', trigger: 'blur' }
  163. ],
  164. address: [
  165. { required: true, message: '请选择活动区域', trigger: 'change' }
  166. ],
  167. type: [
  168. { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
  169. ]
  170. }
  171. };
  172. },
  173. methods: {
  174. setValue() {
  175. this.form.name = 'jack';
  176. this.form.address = 'aaaa';
  177. this.form.type.push('地推活动');
  178. }
  179. }
  180. }, true);
  181. vm.setValue();
  182. vm.$refs.form.resetFields();
  183. vm.$refs.form.$nextTick(_ => {
  184. expect(vm.form.name).to.equal('');
  185. expect(vm.form.address).to.equal('');
  186. expect(vm.form.type.length).to.equal(0);
  187. done();
  188. });
  189. });
  190. it('form item nest', done => {
  191. vm = createVue({
  192. template: `
  193. <el-form ref="form" :model="form" :rules="rules">
  194. <el-form-item label="活动时间" required>
  195. <el-col :span="11">
  196. <el-form-item prop="date1">
  197. <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
  198. </el-form-item>
  199. </el-col>
  200. <el-col class="line" :span="2">-</el-col>
  201. <el-col :span="11">
  202. <el-form-item prop="date2">
  203. <el-time-picker type="fixed-time" placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
  204. </el-form-item>
  205. </el-col>
  206. </el-form-item>
  207. </el-form>
  208. `,
  209. data() {
  210. return {
  211. form: {
  212. date1: '',
  213. date2: ''
  214. },
  215. rules: {
  216. date1: [
  217. { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
  218. ]
  219. }
  220. };
  221. },
  222. methods: {
  223. setValue() {
  224. this.name = 'jack';
  225. this.address = 'aaaa';
  226. }
  227. }
  228. }, true);
  229. vm.$refs.form.validate(valid => {
  230. expect(valid).to.not.true;
  231. done();
  232. });
  233. });
  234. describe('validate', () => {
  235. it('input', done => {
  236. vm = createVue({
  237. template: `
  238. <el-form :model="form" :rules="rules" ref="form">
  239. <el-form-item label="活动名称" prop="name" ref="field">
  240. <el-input v-model="form.name"></el-input>
  241. </el-form-item>
  242. </el-form>
  243. `,
  244. data() {
  245. return {
  246. form: {
  247. name: ''
  248. },
  249. rules: {
  250. name: [
  251. { required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
  252. ]
  253. }
  254. };
  255. },
  256. methods: {
  257. setValue(value) {
  258. this.form.name = value;
  259. }
  260. }
  261. }, true);
  262. vm.$refs.form.validate(valid => {
  263. let field = vm.$refs.field;
  264. expect(valid).to.not.true;
  265. vm.$refs.form.$nextTick(_ => {
  266. expect(field.validateMessage).to.equal('请输入活动名称');
  267. vm.setValue('aaaaa');
  268. vm.$refs.form.$nextTick(_ => {
  269. expect(field.validateMessage).to.equal('');
  270. vm.setValue('aa');
  271. vm.$refs.form.$nextTick(_ => {
  272. expect(field.validateMessage).to.equal('请输入活动名称');
  273. done();
  274. });
  275. });
  276. });
  277. });
  278. });
  279. it('textarea', done => {
  280. vm = createVue({
  281. template: `
  282. <el-form :model="form" :rules="rules" ref="form">
  283. <el-form-item label="活动名称" prop="name" ref="field">
  284. <el-input type="textarea" v-model="form.name"></el-input>
  285. </el-form-item>
  286. </el-form>
  287. `,
  288. data() {
  289. return {
  290. form: {
  291. name: ''
  292. },
  293. rules: {
  294. name: [
  295. { required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
  296. ]
  297. }
  298. };
  299. },
  300. methods: {
  301. setValue(value) {
  302. this.form.name = value;
  303. }
  304. }
  305. }, true);
  306. vm.$refs.form.validate(valid => {
  307. let field = vm.$refs.field;
  308. expect(valid).to.not.true;
  309. vm.$refs.form.$nextTick(_ => {
  310. expect(field.validateMessage).to.equal('请输入活动名称');
  311. vm.setValue('aaaaa');
  312. vm.$refs.form.$nextTick(_ => {
  313. expect(field.validateMessage).to.equal('');
  314. vm.setValue('aa');
  315. vm.$refs.form.$nextTick(_ => {
  316. expect(field.validateMessage).to.equal('请输入活动名称');
  317. done();
  318. });
  319. });
  320. });
  321. });
  322. });
  323. it('selector', done => {
  324. vm = createVue({
  325. template: `
  326. <el-form :model="form" :rules="rules" ref="form">
  327. <el-form-item label="记住密码" prop="region" ref="field">
  328. <el-select v-model="form.region" placeholder="请选择活动区域">
  329. <el-option label="区域一" value="shanghai"></el-option>
  330. <el-option label="区域二" ref="opt" value="beijing"></el-option>
  331. </el-select>
  332. </el-form-item>
  333. </el-form>
  334. `,
  335. data() {
  336. return {
  337. form: {
  338. region: ''
  339. },
  340. rules: {
  341. region: [
  342. {required: true, message: '请选择活动区域', trigger: 'change' }
  343. ]
  344. }
  345. };
  346. }
  347. }, true);
  348. vm.$refs.form.validate(valid => {
  349. let field = vm.$refs.field;
  350. expect(valid).to.false;
  351. setTimeout(_ => {
  352. expect(field.validateMessage).to.equal('请选择活动区域');
  353. // programatic modification of bound value does not triggers change validation
  354. vm.form.region = 'shanghai';
  355. setTimeout(_ => {
  356. expect(field.validateMessage).to.equal('请选择活动区域');
  357. // user modification of bound value triggers change validation
  358. vm.$refs.opt.$el.click();
  359. setTimeout(_ => {
  360. expect(field.validateMessage).to.equal('');
  361. done();
  362. }, 100);
  363. }, 100);
  364. }, 100);
  365. });
  366. });
  367. it('datepicker', done => {
  368. vm = createVue({
  369. template: `
  370. <el-form :model="form" :rules="rules" ref="form">
  371. <el-form-item label="记住密码" prop="date" ref="field">
  372. <el-date-picker type="date" ref="picker" placeholder="选择日期" v-model="form.date" style="width: 100%;"></el-date-picker>
  373. </el-form-item>
  374. </el-form>
  375. `,
  376. data() {
  377. return {
  378. form: {
  379. date: ''
  380. },
  381. rules: {
  382. date: [
  383. {type: 'date', required: true, message: '请选择日期', trigger: 'change' }
  384. ]
  385. }
  386. };
  387. }
  388. }, true);
  389. vm.$refs.form.validate(valid => {
  390. let field = vm.$refs.field;
  391. expect(valid).to.not.true;
  392. setTimeout(_ => {
  393. expect(field.validateMessage).to.equal('请选择日期');
  394. // programatic modification does not trigger change
  395. vm.value = new Date();
  396. setTimeout(_ => {
  397. expect(field.validateMessage).to.equal('请选择日期');
  398. vm.value = '';
  399. // user modification triggers change
  400. const input = vm.$refs.picker.$el.querySelector('input');
  401. input.blur();
  402. input.focus();
  403. setTimeout(_ => {
  404. const keyDown = (el, keyCode) => {
  405. const evt = document.createEvent('Events');
  406. evt.initEvent('keydown', true, true);
  407. evt.keyCode = keyCode;
  408. el.dispatchEvent(evt);
  409. };
  410. keyDown(input, 37);
  411. setTimeout(_ => {
  412. keyDown(input, 13);
  413. setTimeout(_ => {
  414. expect(field.validateMessage).to.equal('');
  415. done();
  416. }, DELAY);
  417. }, DELAY);
  418. }, DELAY);
  419. }, DELAY);
  420. }, DELAY);
  421. });
  422. });
  423. it('timepicker', done => {
  424. vm = createVue({
  425. template: `
  426. <el-form :model="form" :rules="rules" ref="form">
  427. <el-form-item label="记住密码" prop="date" ref="field">
  428. <el-time-picker type="fixed-time" ref="picker" placeholder="选择时间" v-model="form.date" style="width: 100%;"></el-time-picker>
  429. </el-form-item>
  430. </el-form>
  431. `,
  432. data() {
  433. return {
  434. form: {
  435. date: ''
  436. },
  437. rules: {
  438. date: [
  439. {type: 'date', required: true, message: '请选择时间', trigger: 'change' }
  440. ]
  441. }
  442. };
  443. }
  444. }, true);
  445. vm.$refs.form.validate(valid => {
  446. let field = vm.$refs.field;
  447. expect(valid).to.not.true;
  448. setTimeout(_ => {
  449. expect(field.validateMessage).to.equal('请选择时间');
  450. // programatic modification does not trigger change
  451. vm.value = new Date();
  452. setTimeout(_ => {
  453. expect(field.validateMessage).to.equal('请选择时间');
  454. vm.value = '';
  455. // user modification triggers change
  456. const input = vm.$refs.picker.$el.querySelector('input');
  457. input.blur();
  458. input.focus();
  459. setTimeout(_ => {
  460. vm.$refs.picker.picker.$el.querySelector('.confirm').click();
  461. setTimeout(_ => {
  462. expect(field.validateMessage).to.equal('');
  463. done();
  464. }, DELAY);
  465. }, DELAY);
  466. }, DELAY);
  467. }, DELAY);
  468. });
  469. });
  470. it('checkbox group', done => {
  471. vm = createVue({
  472. template: `
  473. <el-form :model="form" :rules="rules" ref="form">
  474. <el-form-item label="活动名称" prop="type" ref="field">
  475. <el-checkbox-group v-model="form.type">
  476. <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
  477. <el-checkbox label="地推活动" name="type"></el-checkbox>
  478. <el-checkbox label="线下主题活动" name="type"></el-checkbox>
  479. <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
  480. </el-checkbox-group>
  481. </el-form-item>
  482. </el-form>
  483. `,
  484. data() {
  485. return {
  486. form: {
  487. type: []
  488. },
  489. rules: {
  490. type: [
  491. { type: 'array', required: true, message: '请选择活动类型', trigger: 'change' }
  492. ]
  493. }
  494. };
  495. },
  496. methods: {
  497. setValue(value) {
  498. this.form.type = value;
  499. }
  500. }
  501. }, true);
  502. vm.$refs.form.validate(valid => {
  503. let field = vm.$refs.field;
  504. expect(valid).to.not.true;
  505. vm.$refs.form.$nextTick(_ => {
  506. expect(field.validateMessage).to.equal('请选择活动类型');
  507. vm.setValue(['地推活动']);
  508. vm.$refs.form.$nextTick(_ => {
  509. expect(field.validateMessage).to.equal('');
  510. done();
  511. });
  512. });
  513. });
  514. });
  515. it('radio group', done => {
  516. vm = createVue({
  517. template: `
  518. <el-form :model="form" :rules="rules" ref="form">
  519. <el-form-item label="活动名称" prop="type" ref="field">
  520. <el-radio-group v-model="form.type">
  521. <el-radio label="线上品牌商赞助"></el-radio>
  522. <el-radio label="线下场地免费"></el-radio>
  523. </el-radio-group>
  524. </el-form-item>
  525. </el-form>
  526. `,
  527. data() {
  528. return {
  529. form: {
  530. type: ''
  531. },
  532. rules: {
  533. type: [
  534. { required: true, message: '请选择活动类型', trigger: 'change' }
  535. ]
  536. }
  537. };
  538. },
  539. methods: {
  540. setValue(value) {
  541. this.form.type = value;
  542. }
  543. }
  544. }, true);
  545. vm.$refs.form.validate(valid => {
  546. let field = vm.$refs.field;
  547. expect(valid).to.not.true;
  548. vm.$refs.form.$nextTick(_ => {
  549. expect(field.validateMessage).to.equal('请选择活动类型');
  550. vm.setValue('线下场地免费');
  551. vm.$refs.form.$nextTick(_ => {
  552. expect(field.validateMessage).to.equal('');
  553. done();
  554. });
  555. });
  556. });
  557. });
  558. it('validate field', done => {
  559. vm = createVue({
  560. template: `
  561. <el-form :model="form" :rules="rules" ref="form">
  562. <el-form-item label="活动名称" prop="name" ref="field">
  563. <el-input v-model="form.name"></el-input>
  564. </el-form-item>
  565. </el-form>
  566. `,
  567. data() {
  568. return {
  569. form: {
  570. name: ''
  571. },
  572. rules: {
  573. name: [
  574. { required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
  575. ]
  576. }
  577. };
  578. },
  579. methods: {
  580. setValue(value) {
  581. this.form.name = value;
  582. }
  583. }
  584. }, true);
  585. vm.$refs.form.validateField('name', valid => {
  586. expect(valid).to.not.true;
  587. done();
  588. });
  589. });
  590. it('custom validate', done => {
  591. var checkName = (rule, value, callback) => {
  592. if (value.length < 5) {
  593. callback(new Error('长度至少为5'));
  594. } else {
  595. callback();
  596. }
  597. };
  598. vm = createVue({
  599. template: `
  600. <el-form :model="form" :rules="rules" ref="form">
  601. <el-form-item label="活动名称" prop="name" ref="field">
  602. <el-input v-model="form.name"></el-input>
  603. </el-form-item>
  604. </el-form>
  605. `,
  606. data() {
  607. return {
  608. form: {
  609. name: ''
  610. },
  611. rules: {
  612. name: [
  613. { validator: checkName, trigger: 'change' }
  614. ]
  615. }
  616. };
  617. },
  618. methods: {
  619. setValue(value) {
  620. this.form.name = value;
  621. }
  622. }
  623. }, true);
  624. vm.$refs.form.validate(valid => {
  625. let field = vm.$refs.field;
  626. expect(valid).to.not.true;
  627. vm.$refs.form.$nextTick(_ => {
  628. expect(field.validateMessage).to.equal('长度至少为5');
  629. vm.setValue('aaaaaa');
  630. vm.$refs.form.$nextTick(_ => {
  631. expect(field.validateMessage).to.equal('');
  632. done();
  633. });
  634. });
  635. });
  636. });
  637. it('error', done => {
  638. vm = createVue({
  639. template: `
  640. <el-form :model="form" :rules="rules" ref="form">
  641. <el-form-item label="活动名称" prop="name" :error="error" ref="field">
  642. <el-input v-model="form.name"></el-input>
  643. </el-form-item>
  644. </el-form>
  645. `,
  646. data() {
  647. return {
  648. error: 'dsad',
  649. form: {
  650. name: 'sada'
  651. },
  652. rules: {
  653. name: [
  654. { required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
  655. ]
  656. }
  657. };
  658. },
  659. methods: {
  660. setValue(value) {
  661. this.form.name = value;
  662. }
  663. }
  664. }, true);
  665. vm.$refs.form.validate(valid => {
  666. let field = vm.$refs.field;
  667. expect(valid).to.true;
  668. vm.error = '输入不合法';
  669. vm.$refs.field.$nextTick(_ => {
  670. expect(field.validateState).to.equal('error');
  671. expect(field.validateMessage).to.equal('输入不合法');
  672. done();
  673. });
  674. });
  675. });
  676. it('invalid fields', done => {
  677. var checkName = (rule, value, callback) => {
  678. if (value.length < 5) {
  679. callback(new Error('长度至少为5'));
  680. } else {
  681. callback();
  682. }
  683. };
  684. vm = createVue({
  685. template: `
  686. <el-form :model="form" :rules="rules" ref="form">
  687. <el-form-item label="活动名称" prop="name" ref="field">
  688. <el-input v-model="form.name"></el-input>
  689. </el-form-item>
  690. </el-form>
  691. `,
  692. data() {
  693. return {
  694. form: {
  695. name: ''
  696. },
  697. rules: {
  698. name: [
  699. { validator: checkName, trigger: 'change' }
  700. ]
  701. }
  702. };
  703. }
  704. }, true);
  705. vm.$refs.form.validate((valid, invalidFields) => {
  706. expect(invalidFields.name.length).to.equal(1);
  707. done();
  708. });
  709. });
  710. it('validate return promise', done => {
  711. var checkName = (rule, value, callback) => {
  712. if (value.length < 5) {
  713. callback(new Error('长度至少为5'));
  714. } else {
  715. callback();
  716. }
  717. };
  718. vm = createVue({
  719. template: `
  720. <el-form :model="form" :rules="rules" ref="form">
  721. <el-form-item label="活动名称" prop="name" ref="field">
  722. <el-input v-model="form.name"></el-input>
  723. </el-form-item>
  724. </el-form>
  725. `,
  726. data() {
  727. return {
  728. form: {
  729. name: ''
  730. },
  731. rules: {
  732. name: [
  733. { validator: checkName, trigger: 'change' }
  734. ]
  735. }
  736. };
  737. }
  738. }, true);
  739. vm.$refs.form.validate().catch(validFailed => {
  740. expect(validFailed).to.false;
  741. done();
  742. });
  743. });
  744. });
  745. it('validate event', done => {
  746. vm = createVue({
  747. template: `
  748. <el-form :model="form" :rules="rules" ref="form" @validate="onValidate">
  749. <el-form-item label="活动名称" prop="name" ref="name">
  750. <el-input v-model="form.name"></el-input>
  751. </el-form-item>
  752. <el-form-item label="活动地点" prop="addr" ref="addr">
  753. <el-input v-model="form.addr"></el-input>
  754. </el-form-item>
  755. </el-form>
  756. `,
  757. data() {
  758. return {
  759. form: {
  760. name: '',
  761. addr: ''
  762. },
  763. valid: {
  764. name: null,
  765. addr: null
  766. },
  767. rules: {
  768. name: [
  769. { required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
  770. ],
  771. addr: [
  772. { required: true, message: '请输入活动名称', trigger: 'change' }
  773. ]
  774. }
  775. };
  776. },
  777. methods: {
  778. onValidate(prop, valid) {
  779. this.valid[prop] = valid;
  780. },
  781. setValue(prop, value) {
  782. this.form[prop] = value;
  783. }
  784. }
  785. }, true);
  786. vm.setValue('name', '1');
  787. setTimeout(() => {
  788. expect(vm.valid.name).to.equal(false);
  789. vm.setValue('addr', '1');
  790. setTimeout(() => {
  791. expect(vm.valid.addr).to.equal(true);
  792. vm.setValue('name', '111');
  793. setTimeout(() => {
  794. expect(vm.valid.name).to.equal(true);
  795. done();
  796. }, DELAY);
  797. }, DELAY);
  798. }, DELAY);
  799. });
  800. });