1
0
mirror of synced 2024-11-25 23:06:02 +03:00

Adds slot component tests

This commit is contained in:
Justin Schroeder 2020-05-10 15:23:18 -04:00
parent 9f20c63f13
commit 1e403a7fe9
2 changed files with 47 additions and 3 deletions

View File

@ -55,7 +55,7 @@ class Formulate {
FormulateInputTextArea, FormulateInputTextArea,
FormulateRepeatableProvider FormulateRepeatableProvider
}, },
slotDefaults: { slotComponents: {
label: 'FormulateLabel', label: 'FormulateLabel',
help: 'FormulateHelp', help: 'FormulateHelp',
errors: 'FormulateErrors', errors: 'FormulateErrors',
@ -169,7 +169,7 @@ class Formulate {
if (def.slotComponents && def.slotComponents[slot]) { if (def.slotComponents && def.slotComponents[slot]) {
return def.slotComponents[slot] return def.slotComponents[slot]
} }
return this.options.slotDefaults[slot] return this.options.slotComponents[slot]
} }
/** /**

View File

@ -1,6 +1,6 @@
import Vue from 'vue' import Vue from 'vue'
import flushPromises from 'flush-promises' import flushPromises from 'flush-promises'
import { mount } from '@vue/test-utils' import { mount, createLocalVue } from '@vue/test-utils'
import Formulate from '@/Formulate.js' import Formulate from '@/Formulate.js'
import FormulateInput from '@/FormulateInput.vue' import FormulateInput from '@/FormulateInput.vue'
import FormulateInputBox from '@/inputs/FormulateInputBox.vue' import FormulateInputBox from '@/inputs/FormulateInputBox.vue'
@ -177,4 +177,48 @@ describe('FormulateInput', () => {
expect(wrapper.emitted('error-visibility').length).toBe(1) expect(wrapper.emitted('error-visibility').length).toBe(1)
}) })
it('allows overriding the label default slot component', async () => {
const localVue = createLocalVue()
localVue.component('CustomLabel', {
render: function (h) {
return h('div', { class: 'custom-label' }, [`custom: ${this.context.label}`])
},
props: ['context']
})
localVue.use(Formulate, { slotComponents: { label: 'CustomLabel' } })
const wrapper = mount(FormulateInput, { localVue, propsData: { label: 'My label here' } })
expect(wrapper.find('.custom-label').html()).toBe('<div class="custom-label">custom: My label here</div>')
})
it('allows overriding the help default slot component', async () => {
const localVue = createLocalVue()
localVue.component('CustomHelp', {
render: function (h) {
return h('small', { class: 'custom-help' }, [`custom: ${this.context.help}`])
},
props: ['context']
})
localVue.use(Formulate, { slotComponents: { help: 'CustomHelp' } })
const wrapper = mount(FormulateInput, { localVue, propsData: { help: 'My help here' } })
expect(wrapper.find('.custom-help').html()).toBe('<small class="custom-help">custom: My help here</small>')
})
it('allows overriding the errors component', async () => {
const localVue = createLocalVue()
localVue.component('CustomErrors', {
render: function (h) {
return h('ul', { class: 'my-errors' }, this.context.visibleValidationErrors.map(message => h('li', message)))
},
props: ['context']
})
localVue.use(Formulate, { slotComponents: { errors: 'CustomErrors' } })
const wrapper = mount(FormulateInput, { localVue, propsData: {
help: 'My help here',
errorBehavior: 'live',
validation: 'required'
} })
await flushPromises()
expect(wrapper.find('.my-errors').html())
.toBe(`<ul class="my-errors">\n <li>Text is required.</li>\n</ul>`)
})
}) })