2022-05-06 11:02:07 -08:00
|
|
|
import { test, expect } from '@playwright/experimental-ct-vue'
|
2022-03-11 15:46:11 -08:00
|
|
|
import Button from './components/Button.vue'
|
2022-08-23 20:35:43 +02:00
|
|
|
import Counter from './components/Counter.vue'
|
2022-03-11 15:46:11 -08:00
|
|
|
import DefaultSlot from './components/DefaultSlot.vue'
|
|
|
|
import NamedSlots from './components/NamedSlots.vue'
|
2022-08-23 20:35:43 +02:00
|
|
|
import MultiRoot from './components/MultiRoot.vue'
|
|
|
|
import Component from './components/Component.vue'
|
2022-09-21 15:12:18 -07:00
|
|
|
import EmptyTemplate from './components/EmptyTemplate.vue'
|
2022-10-18 22:04:54 +02:00
|
|
|
import type { HooksConfig } from '../playwright'
|
2022-03-11 15:46:11 -08:00
|
|
|
|
|
|
|
test.use({ viewport: { width: 500, height: 500 } })
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('render props', async ({ mount }) => {
|
2022-03-11 15:46:11 -08:00
|
|
|
const component = await mount(Button, {
|
|
|
|
props: {
|
|
|
|
title: 'Submit'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
await expect(component).toContainText('Submit')
|
|
|
|
})
|
|
|
|
|
2022-08-23 20:35:43 +02:00
|
|
|
test('renderer and keep the component instance intact', async ({ mount }) => {
|
|
|
|
const component = await mount<{ count: number }>(Counter, {
|
2022-09-21 15:12:18 -07:00
|
|
|
props: {
|
2022-08-23 20:35:43 +02:00
|
|
|
count: 9001
|
|
|
|
}
|
|
|
|
});
|
|
|
|
await expect(component.locator('#rerender-count')).toContainText('9001')
|
2022-09-21 15:12:18 -07:00
|
|
|
|
2022-10-11 04:56:33 +02:00
|
|
|
await component.update({ props: { count: 1337 } })
|
2022-08-23 20:35:43 +02:00
|
|
|
await expect(component.locator('#rerender-count')).toContainText('1337')
|
2022-09-21 15:12:18 -07:00
|
|
|
|
2022-10-11 04:56:33 +02:00
|
|
|
await component.update({ props: { count: 42 } })
|
2022-08-23 20:35:43 +02:00
|
|
|
await expect(component.locator('#rerender-count')).toContainText('42')
|
|
|
|
|
|
|
|
await expect(component.locator('#remount-count')).toContainText('1')
|
|
|
|
})
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('emit an submit event when the button is clicked', async ({ mount }) => {
|
2022-10-20 22:33:25 +02:00
|
|
|
const messages: string[] = []
|
2022-03-11 15:46:11 -08:00
|
|
|
const component = await mount(Button, {
|
|
|
|
props: {
|
|
|
|
title: 'Submit'
|
|
|
|
},
|
|
|
|
on: {
|
2022-10-20 22:33:25 +02:00
|
|
|
submit: (data: string) => messages.push(data)
|
2022-03-11 15:46:11 -08:00
|
|
|
}
|
|
|
|
})
|
2022-03-13 20:26:13 -08:00
|
|
|
await component.click()
|
2022-03-11 15:46:11 -08:00
|
|
|
expect(messages).toEqual(['hello'])
|
|
|
|
})
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('render a default slot', async ({ mount }) => {
|
2022-03-11 15:46:11 -08:00
|
|
|
const component = await mount(DefaultSlot, {
|
|
|
|
slots: {
|
|
|
|
default: 'Main Content'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
await expect(component).toContainText('Main Content')
|
|
|
|
})
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('render a component with multiple slots', async ({ mount }) => {
|
2022-03-11 15:46:11 -08:00
|
|
|
const component = await mount(DefaultSlot, {
|
|
|
|
slots: {
|
|
|
|
default: ['one', 'two']
|
|
|
|
}
|
|
|
|
})
|
|
|
|
await expect(component).toContainText('one')
|
|
|
|
await expect(component).toContainText('two')
|
|
|
|
})
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('render a component with a named slot', async ({ mount }) => {
|
2022-03-11 15:46:11 -08:00
|
|
|
const component = await mount(NamedSlots, {
|
|
|
|
slots: {
|
|
|
|
header: 'Header',
|
|
|
|
main: 'Main Content',
|
|
|
|
footer: 'Footer'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
await expect(component).toContainText('Header')
|
|
|
|
await expect(component).toContainText('Main Content')
|
|
|
|
await expect(component).toContainText('Footer')
|
|
|
|
})
|
2022-08-23 20:35:43 +02:00
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('render a component without options', async ({ mount }) => {
|
2022-08-23 20:35:43 +02:00
|
|
|
const component = await mount(Component)
|
|
|
|
await expect(component).toContainText('test')
|
|
|
|
})
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('run hooks', async ({ page, mount }) => {
|
2022-10-20 22:33:25 +02:00
|
|
|
const messages: string[] = []
|
2022-08-23 20:35:43 +02:00
|
|
|
page.on('console', m => messages.push(m.text()))
|
2022-10-18 22:04:54 +02:00
|
|
|
await mount<HooksConfig>(Button, {
|
2022-08-23 20:35:43 +02:00
|
|
|
props: {
|
|
|
|
title: 'Submit'
|
|
|
|
},
|
|
|
|
hooksConfig: { route: 'A' }
|
|
|
|
})
|
|
|
|
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}, app: true', 'After mount el: HTMLButtonElement'])
|
|
|
|
})
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('unmount', async ({ page, mount }) => {
|
2022-08-23 20:35:43 +02:00
|
|
|
const component = await mount(Button, {
|
|
|
|
props: {
|
|
|
|
title: 'Submit'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
await expect(page.locator('#root')).toContainText('Submit')
|
|
|
|
await component.unmount();
|
|
|
|
await expect(page.locator('#root')).not.toContainText('Submit');
|
|
|
|
});
|
|
|
|
|
2022-09-12 18:27:53 +02:00
|
|
|
test('unmount a multi root component', async ({ mount, page }) => {
|
2022-08-23 20:35:43 +02:00
|
|
|
const component = await mount(MultiRoot)
|
|
|
|
await expect(page.locator('#root')).toContainText('root 1')
|
|
|
|
await expect(page.locator('#root')).toContainText('root 2')
|
|
|
|
await component.unmount()
|
|
|
|
await expect(page.locator('#root')).not.toContainText('root 1')
|
|
|
|
await expect(page.locator('#root')).not.toContainText('root 2')
|
|
|
|
})
|
2022-09-21 15:12:18 -07:00
|
|
|
|
|
|
|
test('get textContent of the empty template', async ({ mount }) => {
|
|
|
|
const component = await mount(EmptyTemplate);
|
|
|
|
expect(await component.allTextContents()).toEqual(['']);
|
|
|
|
expect(await component.textContent()).toBe('');
|
|
|
|
await expect(component).toHaveText('');
|
|
|
|
});
|