playwright/tests/components/ct-react17/tests/update.spec.tsx

92 lines
3.1 KiB
TypeScript
Raw Normal View History

2023-04-10 00:11:31 +02:00
import { test, expect } from '@playwright/experimental-ct-react17';
import Counter from '@/components/Counter';
2023-05-02 00:20:46 +02:00
import DefaultChildren from '@/components/DefaultChildren';
test('update props without remounting', async ({ mount }) => {
const component = await mount(<Counter count={9001} />);
2023-03-24 23:55:32 +01:00
await expect(component.getByTestId('props')).toContainText('9001');
await component.update(<Counter count={1337} />);
await expect(component).not.toContainText('9001');
2023-03-24 23:55:32 +01:00
await expect(component.getByTestId('props')).toContainText('1337');
2023-03-24 23:55:32 +01:00
await expect(component.getByTestId('remount-count')).toContainText('1');
});
2023-05-02 00:20:46 +02:00
test('update child props without remounting', async ({ mount }) => {
const component = await mount(<DefaultChildren><Counter count={9001} /></DefaultChildren>);
await expect(component.getByTestId('props')).toContainText('9001');
await component.update(<DefaultChildren><Counter count={1337} /></DefaultChildren>);
await expect(component).not.toContainText('9001');
await expect(component.getByTestId('props')).toContainText('1337');
await expect(component.getByTestId('remount-count')).toContainText('1');
});
test('update callbacks without remounting', async ({ mount }) => {
const component = await mount(<Counter />);
const messages: string[] = [];
await component.update(
<Counter
onClick={(message) => {
messages.push(message);
}}
/>
);
await component.click();
expect(messages).toEqual(['hello']);
2023-03-24 23:55:32 +01:00
await expect(component.getByTestId('remount-count')).toContainText('1');
});
2023-05-02 00:20:46 +02:00
test('update child callbacks without remounting', async ({ mount }) => {
const component = await mount(<DefaultChildren><Counter /></DefaultChildren>);
const messages: string[] = [];
await component.update(
<DefaultChildren>
<Counter
onClick={(message) => {
messages.push(message);
}}
/>
</DefaultChildren>
);
await component.getByRole('button').click();
expect(messages).toEqual(['hello']);
await expect(component.getByTestId('remount-count')).toContainText('1');
});
test('update children without remounting', async ({ mount }) => {
const component = await mount(<Counter>Default Slot</Counter>);
await expect(component).toContainText('Default Slot');
await component.update(<Counter>Test Slot</Counter>);
await expect(component).not.toContainText('Default Slot');
await expect(component).toContainText('Test Slot');
2023-03-24 23:55:32 +01:00
await expect(component.getByTestId('remount-count')).toContainText('1');
});
2023-05-02 00:20:46 +02:00
test('update grandchild without remounting', async ({ mount }) => {
const component = await mount(
<DefaultChildren>
<Counter>Default Slot</Counter>
</DefaultChildren>
);
await expect(component.getByRole('button')).toContainText('Default Slot');
await component.update(
<DefaultChildren>
<Counter>Test Slot</Counter>
</DefaultChildren>
);
await expect(component.getByRole('button')).not.toContainText('Default Slot');
await expect(component.getByRole('button')).toContainText('Test Slot');
await expect(component.getByTestId('remount-count')).toContainText('1');
});