import { mount, config } from '@vue/test-utils';
import Textarea from '../index.vue';
import { nextTick, ref } from 'vue';
// 所有的测试用例之前执行一次
beforeAll(() => {
config.global.components = {
NutTextarea: Textarea
};
});
// 所有的测试用例之后执行一次
afterAll(() => {
config.global.components = {};
});
test('props v-model', async () => {
const component = {
template: ``,
setup() {
const value = ref('618');
return {
value
};
}
};
const wrapper = mount(component);
await nextTick();
const txtWrapper = wrapper.find('.nut-textarea__textarea').element as HTMLTextAreaElement;
expect(txtWrapper.value).toBe('618');
});
test('props placeholder max-length rows limit-show', async () => {
const component = {
template: ``,
setup() {
const value = ref('123456');
const placeholder = ref('test');
const maxLength = ref(3);
const limitShow = ref(true);
const rows = ref('5');
return {
value,
placeholder,
maxLength,
limitShow,
rows
};
}
};
const wrapper = mount(component);
await nextTick();
const txtWrapper = wrapper.find('.nut-textarea__textarea').element as HTMLTextAreaElement;
expect(txtWrapper.placeholder).toBe(wrapper.vm.placeholder);
expect(txtWrapper.value).toBe('123');
expect(wrapper.find('.nut-textarea__textarea').attributes('rows')).toBe(wrapper.vm.rows);
expect(wrapper.findAll('.nut-textarea__limit')).toHaveLength(1);
});
test('props autosize text-align autofocus', async () => {
const component = {
template: ``,
setup() {
const value = ref('123456');
const autosize = ref(true);
const textAlign = ref('right');
const autofocus = ref(true);
return {
value,
autosize,
textAlign,
autofocus
};
}
};
const wrapper = mount(component);
await nextTick();
const txtWrapper = wrapper.find('.nut-textarea__textarea').element as HTMLTextAreaElement;
expect(txtWrapper.style.textAlign).toBe(wrapper.vm.textAlign);
expect(wrapper.find('.nut-textarea__textarea').attributes('autofocus')).not.toBeUndefined();
});
test('props readonly disabled', async () => {
const component = {
template: ``,
setup() {
const value = ref('123456');
const readonly = ref(true);
const disabled = ref(true);
return {
value,
readonly,
disabled
};
}
};
const wrapper = mount(component);
await nextTick();
const txtWrapper = wrapper.find('.nut-textarea__textarea');
expect(txtWrapper.attributes('readonly')).not.toBeUndefined();
expect(txtWrapper.attributes('disabled')).not.toBeUndefined();
});
test('should emit change event when textarea is change', () => {
const wrapper = mount(Textarea);
wrapper.find('textarea').trigger('input');
expect(wrapper.emitted('change')).toBeTruthy();
});
test('should emit focuse event when textarea is focus', () => {
const wrapper = mount(Textarea);
wrapper.find('textarea').trigger('focus');
expect(wrapper.emitted('focus')).toBeTruthy();
});
test('should emit blur event when textarea is blur', () => {
const wrapper = mount(Textarea);
wrapper.find('textarea').trigger('blur');
expect(wrapper.emitted('blur')).toBeTruthy();
});