mirror of
https://github.com/tenrok/vue-meta.git
synced 2026-05-26 12:54:05 +03:00
024e7c5a62
* feat: add an appId to tags to support multiple apps * feat: show warning on calling () on non-vuemeta components * feat: always use appId ssr for server-generated apps * test: update tests for appId * chore: update circleci to only run audit for dependencies * fix: dont set data-vue-meta attribute on title it has no use on the client as we use document.title there. Which also means the appId listed would be wrong once the title is updated by another app then the ssr app * chore: remove unused import * chore: improve not supported message
105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
import { mount, VueMetaServerPlugin, loadVueMetaPlugin } from '../utils'
|
|
import { defaultOptions } from '../../src/shared/constants'
|
|
|
|
jest.mock('../../package.json', () => ({
|
|
version: 'test-version'
|
|
}))
|
|
|
|
describe('plugin', () => {
|
|
let Vue
|
|
|
|
beforeEach(() => jest.clearAllMocks())
|
|
beforeAll(() => (Vue = loadVueMetaPlugin()))
|
|
|
|
test('not loaded when no metaInfo defined', () => {
|
|
const warn = jest.spyOn(console, 'warn').mockImplementation(() => {})
|
|
|
|
const instance = new Vue()
|
|
expect(instance.$meta).toEqual(expect.any(Function))
|
|
|
|
expect(instance.$meta().inject).toEqual(expect.any(Function))
|
|
expect(instance.$meta().refresh).toEqual(expect.any(Function))
|
|
expect(instance.$meta().getOptions).toEqual(expect.any(Function))
|
|
|
|
expect(instance.$meta().inject()).not.toBeDefined()
|
|
expect(warn).toHaveBeenCalledTimes(1)
|
|
expect(instance.$meta().refresh()).not.toBeDefined()
|
|
expect(warn).toHaveBeenCalledTimes(2)
|
|
|
|
instance.$meta().getOptions()
|
|
expect(warn).toHaveBeenCalledTimes(3)
|
|
warn.mockRestore()
|
|
})
|
|
|
|
test('is loaded', () => {
|
|
const instance = new Vue({ metaInfo: {} })
|
|
expect(instance.$meta).toEqual(expect.any(Function))
|
|
|
|
expect(instance.$meta().inject).toEqual(expect.any(Function))
|
|
expect(instance.$meta().refresh).toEqual(expect.any(Function))
|
|
expect(instance.$meta().getOptions).toEqual(expect.any(Function))
|
|
|
|
expect(instance.$meta().inject()).toBeDefined()
|
|
expect(instance.$meta().refresh()).toBeDefined()
|
|
|
|
const options = instance.$meta().getOptions()
|
|
expect(options).toBeDefined()
|
|
expect(options.keyName).toBe(defaultOptions.keyName)
|
|
})
|
|
|
|
test('component has _hasMetaInfo set to true', () => {
|
|
const Component = Vue.component('test-component', {
|
|
template: '<div>Test</div>',
|
|
[defaultOptions.keyName]: {
|
|
title: 'Hello World'
|
|
}
|
|
})
|
|
|
|
const { vm } = mount(Component, { localVue: Vue })
|
|
expect(vm._hasMetaInfo).toBe(true)
|
|
})
|
|
|
|
test('plugin sets package version', () => {
|
|
expect(VueMetaServerPlugin.version).toBe('test-version')
|
|
})
|
|
|
|
test('prints deprecation warning once when using _hasMetaInfo', () => {
|
|
const warn = jest.spyOn(console, 'warn').mockImplementation(() => {})
|
|
|
|
const Component = Vue.component('test-component', {
|
|
template: '<div>Test</div>',
|
|
[defaultOptions.keyName]: {
|
|
title: 'Hello World'
|
|
}
|
|
})
|
|
|
|
Vue.config.devtools = true
|
|
const { vm } = mount(Component, { localVue: Vue })
|
|
|
|
expect(vm._hasMetaInfo).toBe(true)
|
|
expect(warn).toHaveBeenCalledTimes(1)
|
|
|
|
expect(vm._hasMetaInfo).toBe(true)
|
|
expect(warn).toHaveBeenCalledTimes(1)
|
|
warn.mockRestore()
|
|
})
|
|
|
|
test('can use hasMetaInfo export', () => {
|
|
const warn = jest.spyOn(console, 'warn').mockImplementation(() => {})
|
|
|
|
const Component = Vue.component('test-component', {
|
|
template: '<div>Test</div>',
|
|
[defaultOptions.keyName]: {
|
|
title: 'Hello World'
|
|
}
|
|
})
|
|
|
|
const { vm } = mount(Component, { localVue: Vue })
|
|
|
|
expect(VueMetaServerPlugin.hasMetaInfo(vm)).toBe(true)
|
|
expect(warn).not.toHaveBeenCalled()
|
|
|
|
warn.mockRestore()
|
|
})
|
|
})
|