Skip to content

Commit

Permalink
test: reduce flakiness of DOM event tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ramboz committed May 29, 2024
1 parent 036852c commit fe89007
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 12 deletions.
9 changes: 6 additions & 3 deletions tests/audiences.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ test.describe('Page-level audiences', () => {
});

test('triggers a DOM event with the audience detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/audiences/page-level');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'audience',
element: await page.evaluate(() => document.body),
audience: 'foo',
Expand Down Expand Up @@ -125,8 +126,9 @@ test.describe('Section-level audiences', () => {
});

test('triggers a DOM event with the audience detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/audiences/section-level');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'audience',
element: await page.evaluate(() => document.querySelector('.section')),
audience: 'bar',
Expand Down Expand Up @@ -181,8 +183,9 @@ test.describe('Fragment-level audiences', () => {
});

test('triggers a DOM event with the audience detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/audiences/fragment-level');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'audience',
element: await page.evaluate(() => document.querySelector('.fragment')),
audience: 'foo',
Expand Down
9 changes: 6 additions & 3 deletions tests/campaigns.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,9 @@ test.describe('Page-level campaigns', () => {
});

test('triggers a DOM event with the campaign detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/campaigns/page-level?campaign=bar');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'campaign',
element: await page.evaluate(() => document.body),
campaign: 'bar',
Expand Down Expand Up @@ -133,8 +134,9 @@ test.describe('Section-level campaigns', () => {
});

test('triggers a DOM event with the campaign detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/campaigns/section-level?campaign=bar');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'campaign',
element: await page.evaluate(() => document.querySelector('.section')),
campaign: 'bar',
Expand Down Expand Up @@ -183,8 +185,9 @@ test.describe('Fragment-level campaigns', () => {
});

test('triggers a DOM event with the campaign detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/campaigns/fragment-level?campaign=foo');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'campaign',
element: await page.evaluate(() => document.querySelector('.fragment')),
campaign: 'foo',
Expand Down
9 changes: 6 additions & 3 deletions tests/experiments.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,9 @@ test.describe('Page-level experiments', () => {
});

test('triggers a DOM event with the experiment detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/experiments/page-level?experiment=foo&experiment-variant=challenger-1');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'experiment',
element: await page.evaluate(() => document.body),
experiment: 'foo',
Expand Down Expand Up @@ -211,8 +212,9 @@ test.describe('Section-level experiments', () => {
});

test('triggers a DOM event with the experiment detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/experiments/section-level?experiment=bar/challenger-2');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'experiment',
element: await page.evaluate(() => document.querySelector('.section')),
experiment: 'bar',
Expand Down Expand Up @@ -292,8 +294,9 @@ test.describe('Fragment-level experiments', () => {
});

test('triggers a DOM event with the experiment detail', async ({ page }) => {
const fn = await waitForDomEvent(page, 'aem:experimentation');
await page.goto('/tests/fixtures/experiments/fragment-level?experiment=baz/challenger-1');
expect(await waitForDomEvent(page, 'aem:experimentation')).toEqual({
expect(await page.evaluate(fn)).toEqual({
type: 'experiment',
element: await page.evaluate(() => document.querySelector('.fragment')),
experiment: 'baz',
Expand Down
10 changes: 7 additions & 3 deletions tests/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ export async function goToAndRunExperiment(page, url) {
}

export async function waitForDomEvent(page, eventName) {
return page.evaluate((name) => new Promise((resolve) => {
document.addEventListener(name, (ev) => resolve(ev.detail));
}), eventName);
await page.addInitScript((name) => {
// Override the prototype
window.eventPromise = new Promise((resolve) => {
document.addEventListener(name, (ev) => resolve(ev.detail));
});
}, eventName);
return async () => await window.eventPromise;
}

0 comments on commit fe89007

Please sign in to comment.