debian-mirror-gitlab/spec/frontend/__helpers__/vue_test_utils_helper.js

54 lines
1.8 KiB
JavaScript
Raw Normal View History

2021-02-22 17:27:13 +05:30
import { isArray } from 'lodash';
2019-07-07 11:18:12 +05:30
const vNodeContainsText = (vnode, text) =>
(vnode.text && vnode.text.includes(text)) ||
2021-03-08 18:12:59 +05:30
(vnode.children && vnode.children.filter((child) => vNodeContainsText(child, text)).length);
2019-07-07 11:18:12 +05:30
/**
* Determines whether a `shallowMount` Wrapper contains text
* within one of it's slots. This will also work on Wrappers
* acquired with `find()`, but only if it's parent Wrapper
* was shallowMounted.
* NOTE: Prefer checking the rendered output of a component
* wherever possible using something like `text()` instead.
* @param {Wrapper} shallowWrapper - Vue test utils wrapper (shallowMounted)
* @param {String} slotName
* @param {String} text
*/
export const shallowWrapperContainsSlotText = (shallowWrapper, slotName, text) =>
2019-09-04 21:01:54 +05:30
Boolean(
2021-03-08 18:12:59 +05:30
shallowWrapper.vm.$slots[slotName].filter((vnode) => vNodeContainsText(vnode, text)).length,
2019-09-04 21:01:54 +05:30
);
2019-10-12 21:52:04 +05:30
/**
* Returns a promise that waits for a mutation to be fired before resolving
* NOTE: There's no reject action here so it will hang if it waits for a mutation that won't happen.
* @param {Object} store - The Vue store that contains the mutations
* @param {String} expectedMutationType - The Mutation to wait for
*/
export const waitForMutation = (store, expectedMutationType) =>
2021-03-08 18:12:59 +05:30
new Promise((resolve) => {
const unsubscribe = store.subscribe((mutation) => {
2019-10-12 21:52:04 +05:30
if (mutation.type === expectedMutationType) {
unsubscribe();
resolve();
}
});
});
2021-01-03 14:25:43 +05:30
2021-03-08 18:12:59 +05:30
export const extendedWrapper = (wrapper) => {
2021-02-22 17:27:13 +05:30
if (isArray(wrapper) || !wrapper?.find) {
// eslint-disable-next-line no-console
console.warn(
'[vue-test-utils-helper]: you are trying to extend an object that is not a VueWrapper.',
);
return wrapper;
}
return Object.defineProperty(wrapper, 'findByTestId', {
2021-01-03 14:25:43 +05:30
value(id) {
return this.find(`[data-testid="${id}"]`);
},
});
2021-02-22 17:27:13 +05:30
};