【发布时间】:2019-01-23 13:55:10
【问题描述】:
在我的组件中,提交 btn 被禁用,直到在输入字段中输入值。但是在安装组件之后,似乎组件还不稳定并且验证没有运行,所以 btn 没有被禁用并且它的文本是“设置状态”。所以测试失败:
Expected value to equal:
"set status disabled"
Received:
"set status"
预计该按钮被禁用并且具有“设置状态禁用”文本。
在浏览器中行为是正确的。
HelloWorld.vue
<template>
<div class="hello">
<ValidationObserver>
<form slot-scope="{ invalid }" @submit.prevent="postStatus">
<ValidationProvider name="email" rules="required">
<div slot-scope="{ errors }">
<input v-model="status">
<p>{{ errors[0] }}</p>
</div>
</ValidationProvider>
<button id="submitBtn" @click="postStatus" :disabled="invalid" type="submit">set status {{invalid? 'disabled' :''}} </button>
</form>
</ValidationObserver>
</div>
<script lang="ts">
import {Component, Prop, Vue} from 'vue-property-decorator';
import {Action} from 'vuex-class';
import {ValidationProvider, ValidationObserver} from 'vee-validate';
@Component({
components: {
ValidationProvider, ValidationObserver
},
})
export default class HelloWorld extends Vue {
status: string = '';
@Action('setStatus') private setStatus: any;
public postStatus() {
this.setStatus(this.status);
}
}
HelloWorld.spec.ts
import HelloWorld from '@/components/HelloWorld.vue';
import Vuex from "vuex"
import {mount, createLocalVue} from "@vue/test-utils"
import {ValidationObserver, ValidationProvider} from "vee-validate";
import VeeValidate from 'vee-validate';
const localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(VeeValidate, {
events: 'blur'
});
describe('HelloWorld.vue', () => {
it('button should be initially disabled', () => {
const wrapper = mount(HelloWorld, {
components: {ValidationObserver, ValidationProvider}
});
let submitBtn = wrapper.find("#submitBtn");
expect(submitBtn).toBeTruthy();
expect(submitBtn.text()).toEqual('set status disabled')
});
});
【问题讨论】:
-
您的按钮文本和禁用似乎依赖于
invalid字段。但是,我在组件上看不到它。您是否忘记复制/粘贴invalid字段? -
此处提供了无效字段
标签: vue.js