-
Notifications
You must be signed in to change notification settings - Fork 664
Closed
Description
What problem does this feature solve?
Intro
Assume that there are two components, <x-icon>
and <x-checkbox>
.
The <x-icon>
component is for showing a font icon given by face="..."
attributes like
<x-icon face="error"/> <!-- It shows an error icon -->
<x-icon face="checkbox-empty"/> <!-- It shows a checkbox empty icon -->
<x-icon face="checkbox-checked"/> <!-- It shows a checkbox checked icon -->
And <x-checkbox>
uses <x-icon>
with face
attribute like
<div class="checkbox">
<x-icon :face="face"/> <!-- 'face' attributes are internal and linked to 'checked' attribute -->
<input v-model="checked" type="checkbox">
</div>
So the final HTML will be one of the followings (without resolving <x-icon>
)
<div class="checkbox">
<x-icon face="checkbox-empty"/>
<input type="checkbox">
</div>
<!-- or -->
<div class="checkbox">
<x-icon face="checkbox-checked"/>
<input type="checkbox" checked>
</div>
What I would like to do
I would like to test <x-checkbox>
component without understanding an implementation of the <x-icon>
.
For example, I would like to check
- Is initial HTML shows
<x-icon face="checkbox-empty">
- Is HTML shows
<x-icon face="checkbox-checked">
after<x-checkbox>
has clicked.
For this purpose, I cannot use stubs: { 'x-icon': true }
while
x-icon
is defined incomponents
attributes ofx-checkbox
component and in this case,stubs
seems ignored.stubs
creates an empty comment so I cannot check if the component isx-icon
or notstubs
removes attributes even I usesstubs: { 'x-icon': SomeThing }
so I cannot check if the component attributes ofx-icon
has correctly changed
What does the proposed API look like?
I'm not really proposing but currently, I use a wrapper function to
- Overwrite
localVue.config.isUnknownElement
function to allow elements incomponents
- Remove
components
to prevent element resolving
like
import { mount as mountBase } from '@vue/test-utils';
const original = Vue.config.isUnknownElement;
export function mount(component: any, options: any= {}) {
const localVue = options.localVue || createLocalVue();
if (!!component.options && !!component.options.components) {
const ignoredElements = Object.keys(component.options.components);
Vue.config.isUnknownElement = (tag: string): boolean => {
if (ignoredElements.includes(tag)) {
return false;
}
return original(tag);
}
component.options.components = {};
}
return mountBase(component, {
...options,
localVue,
});
}
Is this a correct way?
iztsv and Osirisxxl
Metadata
Metadata
Assignees
Labels
No labels