Fix draft saving and add tests
This commit is contained in:
parent
9e2086edaf
commit
690812f27c
8 changed files with 364 additions and 2 deletions
132
test/fixtures/setup_test.js
vendored
Normal file
132
test/fixtures/setup_test.js
vendored
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
import { config } from '@vue/test-utils'
|
||||
import { createRouter, createMemoryHistory } from 'vue-router'
|
||||
import VueVirtualScroller from 'vue-virtual-scroller'
|
||||
import { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome'
|
||||
import routes from 'src/boot/routes'
|
||||
import makeMockStore from './mock_store'
|
||||
|
||||
export const $t = msg => msg
|
||||
const $i18n = { t: msg => msg }
|
||||
|
||||
const applyAfterStore = (store, afterStore) => {
|
||||
afterStore(store)
|
||||
return store
|
||||
}
|
||||
|
||||
const getDefaultOpts = ({ afterStore = () => {} } = {}) => ({
|
||||
global: {
|
||||
plugins: [
|
||||
applyAfterStore(makeMockStore(), afterStore),
|
||||
VueVirtualScroller,
|
||||
createRouter({
|
||||
history: createMemoryHistory(),
|
||||
routes: routes({ state: {
|
||||
users: {
|
||||
currentUser: {}
|
||||
},
|
||||
instance: {}
|
||||
}})
|
||||
}),
|
||||
(Vue) => { Vue.directive('body-scroll-lock', {}) }
|
||||
],
|
||||
components: {
|
||||
},
|
||||
stubs: {
|
||||
I18nT: true,
|
||||
teleport: true,
|
||||
FAIcon: true,
|
||||
FALayers: true,
|
||||
},
|
||||
mocks: {
|
||||
$t,
|
||||
$i18n
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// https://github.com/vuejs/vue-test-utils/issues/960
|
||||
const customBehaviors = () => {
|
||||
const filterByText = keyword => {
|
||||
const match = keyword instanceof RegExp
|
||||
? (target) => target && keyword.test(target)
|
||||
: (target) => keyword === target
|
||||
|
||||
return wrapper => (
|
||||
match(wrapper.text()) ||
|
||||
match(wrapper.attributes('aria-label')) ||
|
||||
match(wrapper.attributes('title'))
|
||||
)
|
||||
}
|
||||
|
||||
return {
|
||||
findComponentByText(searchedComponent, text) {
|
||||
return this.findAllComponents(searchedComponent)
|
||||
.filter(filterByText(text))
|
||||
.at(0)
|
||||
},
|
||||
findByText(searchedElement, text) {
|
||||
return this.findAll(searchedElement)
|
||||
.filter(filterByText(text))
|
||||
.at(0)
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
config.plugins.VueWrapper.install(customBehaviors)
|
||||
|
||||
export const mountOpts = (allOpts = {}) => {
|
||||
const { afterStore, ...opts } = allOpts
|
||||
const defaultOpts = getDefaultOpts({ afterStore })
|
||||
const mergedOpts = {
|
||||
...opts,
|
||||
global: {
|
||||
...defaultOpts.global
|
||||
}
|
||||
}
|
||||
|
||||
if (opts.global) {
|
||||
mergedOpts.global.plugins = mergedOpts.global.plugins.concat(opts.global.plugins || [])
|
||||
Object.entries(opts.global).forEach(([k, v]) => {
|
||||
if (k === 'plugins') {
|
||||
return
|
||||
}
|
||||
if (defaultOpts.global[k]) {
|
||||
mergedOpts.global[k] = {
|
||||
...defaultOpts.global[k],
|
||||
...v,
|
||||
}
|
||||
} else {
|
||||
mergedOpts.global[k] = v
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return mergedOpts
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/questions/78033718/how-can-i-wait-for-an-emitted-event-of-a-mounted-component-in-vue-test-utils
|
||||
export const waitForEvent = (wrapper, event, {
|
||||
timeout = 1000,
|
||||
timesEmitted = 1
|
||||
} = {}) => {
|
||||
const tick = 10
|
||||
const totalTries = timeout / tick
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let currentTries = 0
|
||||
const wait = () => {
|
||||
const e = wrapper.emitted(event)
|
||||
if (e && e.length >= timesEmitted) {
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
if (currentTries >= totalTries) {
|
||||
reject(new Error('Event did not fire'))
|
||||
return
|
||||
}
|
||||
++currentTries
|
||||
setTimeout(wait, tick)
|
||||
}
|
||||
wait()
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue