element/test/unit/specs/form.spec.js

656 lines
19 KiB
Vue
Raw Normal View History

2016-11-03 02:14:36 +00:00
import { createVue, destroyVM } from '../util';
describe('Form', () => {
2016-11-03 02:14:36 +00:00
let vm;
afterEach(() => {
destroyVM(vm);
});
it('label width', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="活动名称">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: ''
}
};
}
}, true);
expect(vm.$el.querySelector('.el-form-item__label').style.width).to.equal('80px');
expect(vm.$el.querySelector('.el-form-item__content').style.marginLeft).to.equal('80px');
done();
});
it('inline form', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form ref="form" :model="form" inline>
<el-form-item>
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item>
<el-input v-model="form.address"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: '',
address: ''
}
};
}
}, true);
expect(vm.$el.classList.contains('el-form--inline')).to.be.true;
done();
});
it('label position', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<div>
<el-form :model="form" label-position="top" ref="labelTop">
<el-form-item>
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item>
<el-input v-model="form.address"></el-input>
</el-form-item>
</el-form>
<el-form :model="form" label-position="left" ref="labelLeft">
<el-form-item>
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item>
<el-input v-model="form.address"></el-input>
</el-form-item>
</el-form>
</div>
`,
data() {
return {
form: {
name: '',
address: ''
}
};
}
}, true);
expect(vm.$refs.labelTop.$el.classList.contains('el-form--label-top')).to.be.true;
expect(vm.$refs.labelLeft.$el.classList.contains('el-form--label-left')).to.be.true;
done();
});
2017-01-11 18:34:15 +00:00
it('show message', done => {
vm = createVue({
template: `
<el-form :model="form" ref="form">
<el-form-item label="活动名称" prop="name" :show-message="false"
:rules="{
required: true,
message: '请输入活动名称',
trigger: 'change',
min: 3,
max: 6
}"
>
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: ''
}
};
}
}, true);
vm.$refs.form.validate(valid => {
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
expect(vm.$el.querySelector('.el-form-item__error')).to.not.exist;
done();
});
});
});
it('reset field', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form ref="form" :model="form" :rules="rules">
<el-form-item label="活动名称" prop="name">
<el-input v-model="form.name" ref="fieldName"></el-input>
</el-form-item>
<el-form-item label="活动地址" prop="address">
<el-input v-model="form.address" ref="fieldAddr"></el-input>
</el-form-item>
<el-form-item label="活动性质" prop="type">
<el-checkbox-group v-model="form.type">
<el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
<el-checkbox label="地推活动" name="type"></el-checkbox>
<el-checkbox label="线下主题活动" name="type"></el-checkbox>
<el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: '',
address: '',
type: []
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'blur' }
],
address: [
{ required: true, message: '请选择活动区域', trigger: 'change' }
],
type: [
{ type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
]
}
};
},
methods: {
setValue() {
this.form.name = 'jack';
this.form.address = 'aaaa';
this.form.type.push('地推活动');
}
}
}, true);
vm.setValue();
vm.$refs.form.resetFields();
vm.$refs.form.$nextTick(_ => {
expect(vm.form.name).to.equal('');
expect(vm.form.address).to.equal('');
expect(vm.form.type.length).to.equal(0);
done();
});
});
it('form item nest', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form ref="form" :model="form" :rules="rules">
<el-form-item label="活动时间" required>
<el-col :span="11">
<el-form-item prop="date1">
<el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-form-item prop="date2">
<el-time-picker type="fixed-time" placeholder="选择时间" v-model="form.date2" style="width: 100%;"></el-time-picker>
</el-form-item>
</el-col>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
date1: '',
date2: ''
},
rules: {
date1: [
{ type: 'date', required: true, message: '请选择日期', trigger: 'change' }
]
}
};
},
methods: {
setValue() {
this.name = 'jack';
this.address = 'aaaa';
}
}
}, true);
vm.$refs.form.validate(valid => {
expect(valid).to.not.true;
done();
});
});
describe('validate', () => {
it('input', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="name" ref="field">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: ''
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
]
}
};
},
methods: {
setValue(value) {
this.form.name = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请输入活动名称');
vm.setValue('aaaaa');
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
vm.setValue('aa');
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请输入活动名称');
done();
});
});
});
});
});
it('textarea', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="name" ref="field">
<el-input type="textarea" v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: ''
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
]
}
};
},
methods: {
setValue(value) {
this.form.name = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请输入活动名称');
vm.setValue('aaaaa');
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
vm.setValue('aa');
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请输入活动名称');
done();
});
});
});
});
});
it('selector', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="记住密码" prop="region" ref="field">
<el-select v-model="form.region" placeholder="请选择活动区域">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
</el-select>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
region: 'shanghai'
},
rules: {
region: [
{required: true, message: '请选择活动区域', trigger: 'change' }
]
}
};
},
methods: {
setValue(value) {
this.form.region = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.true;
vm.setValue('');
setTimeout(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请选择活动区域');
vm.setValue('shanghai');
setTimeout(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
done();
}, 100);
}, 100);
});
});
it('datepicker', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="记住密码" prop="date" ref="field">
<el-date-picker type="date" placeholder="选择日期" v-model="form.date" style="width: 100%;"></el-date-picker>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
date: ''
},
rules: {
date: [
{type: 'date', required: true, message: '请选择日期', trigger: 'change' }
]
}
};
},
methods: {
setValue(value) {
this.form.date = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请选择日期');
vm.setValue(new Date());
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
done();
});
});
});
});
it('timepicker', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="记住密码" prop="date" ref="field">
<el-time-picker type="fixed-time" placeholder="选择时间" v-model="form.date" style="width: 100%;"></el-time-picker>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
date: ''
},
rules: {
date: [
{type: 'date', required: true, message: '请选择时间', trigger: 'change' }
]
}
};
},
methods: {
setValue(value) {
this.form.date = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请选择时间');
vm.setValue(new Date());
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
done();
});
});
});
});
it('checkbox group', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="type" ref="field">
<el-checkbox-group v-model="form.type">
<el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
<el-checkbox label="地推活动" name="type"></el-checkbox>
<el-checkbox label="线下主题活动" name="type"></el-checkbox>
<el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
type: []
},
rules: {
type: [
{ type: 'array', required: true, message: '请选择活动类型', trigger: 'change' }
]
}
};
},
methods: {
setValue(value) {
this.form.type = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请选择活动类型');
vm.setValue(['地推活动']);
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
done();
});
});
});
});
it('radio group', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="type" ref="field">
<el-radio-group v-model="form.type">
<el-radio label="线上品牌商赞助"></el-radio>
<el-radio label="线下场地免费"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
type: ''
},
rules: {
type: [
{ required: true, message: '请选择活动类型', trigger: 'change' }
]
}
};
},
methods: {
setValue(value) {
this.form.type = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('请选择活动类型');
vm.setValue('线下场地免费');
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
done();
});
});
});
});
it('validate field', done => {
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="name" ref="field">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: ''
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
]
}
};
},
methods: {
setValue(value) {
this.form.name = value;
}
}
}, true);
vm.$refs.form.validateField('name', valid => {
expect(valid).to.not.true;
done();
});
});
it('custom validate', done => {
var checkName = (rule, value, callback) => {
if (value.length < 5) {
callback(new Error('长度至少为5'));
} else {
callback();
}
};
2016-11-03 02:14:36 +00:00
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="name" ref="field">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
form: {
name: ''
},
rules: {
name: [
{ validator: checkName, trigger: 'change' }
]
}
};
},
methods: {
setValue(value) {
this.form.name = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.not.true;
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('长度至少为5');
vm.setValue('aaaaaa');
vm.$refs.form.$nextTick(_ => {
2016-11-26 02:48:06 +00:00
expect(field.validateMessage).to.equal('');
done();
});
});
});
});
it('error', done => {
vm = createVue({
template: `
<el-form :model="form" :rules="rules" ref="form">
2016-11-26 02:48:06 +00:00
<el-form-item label="活动名称" prop="name" :error="error" ref="field">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-form>
`,
data() {
return {
error: 'dsad',
form: {
name: 'sada'
},
rules: {
name: [
{ required: true, message: '请输入活动名称', trigger: 'change', min: 3, max: 6 }
]
}
};
},
methods: {
setValue(value) {
this.form.name = value;
}
}
}, true);
vm.$refs.form.validate(valid => {
2016-11-26 02:48:06 +00:00
let field = vm.$refs.field;
expect(valid).to.true;
vm.error = '输入不合法';
2016-11-26 02:48:06 +00:00
vm.$refs.field.$nextTick(_ => {
expect(field.validateState).to.equal('error');
expect(field.validateMessage).to.equal('输入不合法');
done();
});
});
});
});
});