Skip to content

Commit

Permalink
#466@trivial: Adds unit tests for waitForNavigation().
Browse files Browse the repository at this point in the history
  • Loading branch information
capricorn86 committed Jan 10, 2024
1 parent f245b8b commit c6ca530
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
36 changes: 36 additions & 0 deletions packages/happy-dom/test/browser/BrowserFrame.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import BrowserNavigationCrossOriginPolicyEnum from '../../src/browser/enums/Brow
import BrowserFrameFactory from '../../src/browser/utilities/BrowserFrameFactory';
import BrowserErrorCaptureEnum from '../../src/browser/enums/BrowserErrorCaptureEnum';
import Headers from '../../src/fetch/Headers';
import IHTMLAnchorElement from '../../src/nodes/html-anchor-element/IHTMLAnchorElement';

describe('BrowserFrame', () => {
afterEach(() => {
Expand Down Expand Up @@ -135,6 +136,41 @@ describe('BrowserFrame', () => {
});
});

describe('waitForNavigation()', () => {
it('Waits page to have been navigated.', async () => {
let count = 0;
vi.spyOn(Fetch.prototype, 'send').mockImplementation(function (): Promise<IResponse> {
count++;
return Promise.resolve(<IResponse>{
text: () =>
new Promise((resolve) =>
setTimeout(
() =>
resolve(
count === 1 ? '<a href="http://localhost:3000/navigated/">' : '<b>Navigated</b>'
),
1
)
)
});
});

const browser = new Browser();
const page = browser.newPage();

await page.mainFrame.goto('http://localhost:3000', {
referrer: 'http://localhost:3000/referrer',
referrerPolicy: 'no-referrer-when-downgrade'
});

(<IHTMLAnchorElement>page.mainFrame.document.querySelector('a')).click();

await page.mainFrame.waitForNavigation();

expect(page.mainFrame.document.querySelector('b')?.textContent).toBe('Navigated');
});
});

describe('abort()', () => {
it('Aborts all ongoing operations.', async () => {
const browser = new Browser();
Expand Down
17 changes: 17 additions & 0 deletions packages/happy-dom/test/browser/BrowserPage.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,23 @@ describe('BrowserPage', () => {
});
});

describe('waitForNavigation()', () => {
it('Waits page to have been navigated.', async () => {
const browser = new Browser();
const page = browser.newPage();
let isCalled = false;

vi.spyOn(page.mainFrame, 'waitForNavigation').mockImplementation((): Promise<void> => {
isCalled = true;
return Promise.resolve();
});

await page.waitForNavigation();

expect(isCalled).toBe(true);
});
});

describe('abort()', () => {
it('Aborts all ongoing operations.', async () => {
const browser = new Browser();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import BrowserNavigationCrossOriginPolicyEnum from '../../../src/browser/enums/B
import BrowserFrameFactory from '../../../src/browser/utilities/BrowserFrameFactory';
import BrowserErrorCaptureEnum from '../../../src/browser/enums/BrowserErrorCaptureEnum';
import Headers from '../../../src/fetch/Headers';
import IHTMLAnchorElement from '../../../src/nodes/html-anchor-element/IHTMLAnchorElement';

describe('DetachedBrowserFrame', () => {
afterEach(() => {
Expand Down Expand Up @@ -145,6 +146,41 @@ describe('DetachedBrowserFrame', () => {
});
});

describe('waitForNavigation()', () => {
it('Waits page to have been navigated.', async () => {
let count = 0;
vi.spyOn(Fetch.prototype, 'send').mockImplementation(function (): Promise<IResponse> {
count++;
return Promise.resolve(<IResponse>{
text: () =>
new Promise((resolve) =>
setTimeout(
() =>
resolve(
count === 1 ? '<a href="http://localhost:3000/navigated/">' : '<b>Navigated</b>'
),
1
)
)
});
});

const browser = new DetachedBrowser(BrowserWindow);
const page = browser.newPage();

await page.mainFrame.goto('http://localhost:3000', {
referrer: 'http://localhost:3000/referrer',
referrerPolicy: 'no-referrer-when-downgrade'
});

(<IHTMLAnchorElement>page.mainFrame.document.querySelector('a')).click();

await page.mainFrame.waitForNavigation();

expect(page.mainFrame.document.querySelector('b')?.textContent).toBe('Navigated');
});
});

describe('abort()', () => {
it('Aborts all ongoing operations.', async () => {
const browser = new DetachedBrowser(BrowserWindow);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,23 @@ describe('DetachedBrowserPage', () => {
});
});

describe('waitForNavigation()', () => {
it('Waits page to have been navigated.', async () => {
const browser = new DetachedBrowser(BrowserWindow);
const page = browser.newPage();
let isCalled = false;

vi.spyOn(page.mainFrame, 'waitForNavigation').mockImplementation((): Promise<void> => {
isCalled = true;
return Promise.resolve();
});

await page.waitForNavigation();

expect(isCalled).toBe(true);
});
});

describe('abort()', () => {
it('Aborts all ongoing operations.', async () => {
const browser = new DetachedBrowser(BrowserWindow);
Expand Down

0 comments on commit c6ca530

Please sign in to comment.