Skip to content

Commit 56f2c46

Browse files
committed
Refactor some tests to be more clear & straightforward
1 parent c257f4e commit 56f2c46

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

test/puppeteer/demo.test.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
// Imports
22
import path from 'path';
3+
import { Page } from 'puppeteer';
34

45
// Helper functions used in multiple tests
56
const currentFocusID = () => page.evaluate(() => document.activeElement.id);
67
const menuOpen = () => page.waitForSelector('#menu', { visible: true });
78
const menuClosed = () => page.waitForSelector('#menu', { hidden: true });
9+
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
10+
11+
const menuIsOpen = async (page: Page) =>
12+
await page.evaluate(() => {
13+
const element = document.querySelector('#menu');
14+
const style = getComputedStyle(element);
15+
const rect = element.getBoundingClientRect();
16+
17+
return style.visibility !== 'hidden' && !!(rect.bottom || rect.top || rect.height || rect.width);
18+
});
819

920
// Tests
1021
beforeEach(async () => {
@@ -82,17 +93,17 @@ it('leaves the menu open if you click inside of it', async () => {
8293
});
8394

8495
await page.click('#menu-item-3');
85-
await new Promise((resolve) => setTimeout(resolve, 1000)); // visibility: hidden is delayed via CSS
86-
await menuOpen(); // times out if menu closes
96+
await sleep(1000); // visibility: hidden is delayed via CSS
97+
expect(await menuIsOpen(page)).toBe(true);
8798

8899
const { xOffset, yOffset } = await page.evaluate((el: HTMLElement) => {
89100
const { left: xOffset, top: yOffset } = el.getBoundingClientRect();
90101
return { xOffset, yOffset };
91102
}, await page.$('#menu'));
92103

93104
await page.mouse.click(xOffset + 2, yOffset + 2); // Click just inside the top left corner (`page.click()` clicks the center, which is a link to NPM)
94-
await new Promise((resolve) => setTimeout(resolve, 1000)); // visibility: hidden is delayed via CSS
95-
await menuOpen(); // times out if menu closes
105+
await sleep(1000); // visibility: hidden is delayed via CSS
106+
expect(await menuIsOpen(page)).toBe(true);
96107

97108
expect(true).toBe(true);
98109
});

0 commit comments

Comments
 (0)