All files index.js

97.62% Statements 41/42
88.89% Branches 16/18
92.31% Functions 12/13
97.62% Lines 41/42
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106                        10x             14x 14x 14x   14x 3x 3x 3x     14x 1x 1x 1x         14x 1x     14x                 14x   14x 14x 14x 14x     14x     1x 1x 1x 1x     1x 1x   1x           3x       3x 3x   3x 3x     10x 690x 690x 12x 12x       10x 1x 1x                
import {
  createLocalVue,
  mount
} from '@vue/test-utils'
 
import {
  getQueriesForElement,
  prettyDOM,
  wait,
  fireEvent
} from 'dom-testing-library'
 
const mountedWrappers = new Set()
 
function render (TestComponent, {
  props = null,
  store = null,
  routes = null
} = {}, configurationCb) {
  const localVue = createLocalVue()
  let vuexStore = null
  let router = null
 
  if (store) {
    const Vuex = require('vuex')
    localVue.use(Vuex)
    vuexStore = new Vuex.Store(store)
  }
 
  if (routes) {
    const VueRouter = require('vue-router')
    localVue.use(VueRouter)
    router = new VueRouter({
      routes
    })
  }
 
  if (configurationCb && typeof configurationCb === 'function') {
    configurationCb(localVue)
  }
 
  const wrapper = mount(TestComponent, {
    localVue,
    router,
    store: vuexStore,
    propsData: { ...props },
    attachToDocument: true,
    sync: false
  })
 
  mountedWrappers.add(wrapper)
 
  Eif (wrapper.element.parentNode === document.body) {
    const div = document.createElement('div')
    wrapper.element.parentNode.insertBefore(div, wrapper.element)
    div.appendChild(wrapper.element)
  }
 
  return {
    container: wrapper.element.parentNode,
    baseElement: document.body,
    debug: () => console.log(prettyDOM(wrapper.element)),
    unmount: () => wrapper.destroy(),
    isUnmounted: () => wrapper.vm._isDestroyed,
    html: () => wrapper.html(),
    emitted: () => wrapper.emitted(),
    updateProps: _ => {
      wrapper.setProps(_)
      return wait()
    },
    updateState: _ => wrapper.setData(_),
    ...getQueriesForElement(wrapper.element.parentNode)
  }
}
 
function cleanup () {
  mountedWrappers.forEach(cleanupAtWrapper)
}
 
function cleanupAtWrapper (wrapper) {
  Eif (wrapper.element.parentNode && wrapper.element.parentNode.parentNode === document.body) {
    document.body.removeChild(wrapper.element.parentNode)
  }
  wrapper.destroy()
  mountedWrappers.delete(wrapper)
}
 
Object.keys(fireEvent).forEach(fn => {
  fireEvent[`_${fn}`] = fireEvent[fn]
  fireEvent[fn] = async (...params) => {
    fireEvent[`_${fn}`](...params)
    await wait()
  }
})
 
fireEvent.touch = async (elem) => {
  await fireEvent.focus(elem)
  await fireEvent.blur(elem)
}
 
export * from 'dom-testing-library'
export {
  cleanup,
  render
}