From fc5799859b549202f9f2ac9e1e14baeb072575c3 Mon Sep 17 00:00:00 2001 From: pimlie Date: Sun, 9 Jun 2019 14:05:54 +0200 Subject: [PATCH] test: fix ssr hydration tests --- test/e2e/ssr.test.js | 2 +- test/unit/components.test.js | 48 +++++++++++++++++++++++++++++------- test/utils/index.js | 4 ++- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/test/e2e/ssr.test.js b/test/e2e/ssr.test.js index 74d8c3c..2a92720 100644 --- a/test/e2e/ssr.test.js +++ b/test/e2e/ssr.test.js @@ -10,7 +10,7 @@ describe('basic browser with ssr page', () => { test('validate ssr', () => { const htmlTag = html.match(/]+)>/)[0] - expect(htmlTag).toContain('data-vue-meta-server-rendered') + expect(htmlTag).toContain('data-vue-meta-server-rendered ') expect(htmlTag).toContain(' lang="en" ') expect(htmlTag).toContain(' amp ') expect(htmlTag).not.toContain('allowfullscreen') diff --git a/test/unit/components.test.js b/test/unit/components.test.js index 272529e..5171ad3 100644 --- a/test/unit/components.test.js +++ b/test/unit/components.test.js @@ -1,5 +1,5 @@ import _getMetaInfo from '../../src/shared/getMetaInfo' -import { mount, loadVueMetaPlugin, vmTick } from '../utils' +import { mount, createWrapper, loadVueMetaPlugin, vmTick } from '../utils' import { defaultOptions } from '../../src/shared/constants' import GoodbyeWorld from '../components/goodbye-world.vue' @@ -102,12 +102,26 @@ describe('client', () => { test('doesnt update when ssr attribute is set', () => { html.setAttribute(defaultOptions.ssrAttribute, 'true') - const wrapper = mount(HelloWorld, { localVue: Vue }) + + const el = document.createElement('div') + el.setAttribute('id', 'app') + el.setAttribute('data-server-rendered', true) + document.body.appendChild(el) + + const Component = Vue.extend({ + metaInfo: { title: 'Test' }, + render(h) { + return h('div', null, 'Test') + } + }) + + const vm = new Component().$mount(el) + const wrapper = createWrapper(vm, { attachToDocument: true }) const { tags } = wrapper.vm.$meta().refresh() - // TODO: fix this test, not sure how to create a wrapper with a attri - // bute data-server-rendered="true" - expect(tags).not.toBe(false) + expect(tags).toBe(false) + + wrapper.destroy() }) test('changed function is called', async () => { @@ -203,9 +217,14 @@ describe('client', () => { test('changes before hydration initialization trigger an update', async () => { html.setAttribute(defaultOptions.ssrAttribute, 'true') + const el = document.createElement('div') + el.setAttribute('id', 'app') + el.setAttribute('data-server-rendered', true) + document.body.appendChild(el) + // this component uses a computed prop to simulate a non-synchronous // metaInfo update like you would have with a Vuex mutation - const component = Vue.component('test-component', { + const Component = Vue.extend({ data() { return { hiddenTheme: 'light' @@ -229,7 +248,8 @@ describe('client', () => { } }) - const wrapper = mount(component, { localVue: Vue }) + const vm = new Component().$mount(el) + const wrapper = createWrapper(vm, { attachToDocument: true }) expect(html.getAttribute('theme')).not.toBe('dark') await vmTick(wrapper.vm) @@ -237,12 +257,19 @@ describe('client', () => { expect(html.getAttribute('theme')).toBe('dark') html.removeAttribute('theme') + + wrapper.destroy() }) test('changes during hydration initialization trigger an update', async () => { html.setAttribute(defaultOptions.ssrAttribute, 'true') - const component = Vue.component('test-component', { + const el = document.createElement('div') + el.setAttribute('id', 'app') + el.setAttribute('data-server-rendered', true) + document.body.appendChild(el) + + const Component = Vue.extend({ data() { return { hiddenTheme: 'light' @@ -266,7 +293,8 @@ describe('client', () => { } }) - const wrapper = mount(component, { localVue: Vue }) + const vm = new Component().$mount(el) + const wrapper = createWrapper(vm, { attachToDocument: true }) expect(html.getAttribute('theme')).not.toBe('dark') await vmTick(wrapper.vm) @@ -274,5 +302,7 @@ describe('client', () => { expect(html.getAttribute('theme')).toBe('dark') html.removeAttribute('theme') + + wrapper.destroy() }) }) diff --git a/test/utils/index.js b/test/utils/index.js index 1fb19c0..a1812df 100644 --- a/test/utils/index.js +++ b/test/utils/index.js @@ -1,4 +1,4 @@ -import { mount, createLocalVue } from '@vue/test-utils' +import { mount, shallowMount, createWrapper, createLocalVue } from '@vue/test-utils' import { renderToString } from '@vue/server-test-utils' import { defaultOptions } from '../../src/shared/constants' import VueMetaBrowserPlugin from '../../src/browser' @@ -6,6 +6,8 @@ import VueMetaServerPlugin from '../../src' export { mount, + shallowMount, + createWrapper, renderToString, VueMetaBrowserPlugin, VueMetaServerPlugin