diff --git a/packages/jest-environment-puppeteer/README.md b/packages/jest-environment-puppeteer/README.md index 3c57ace6..f752e913 100644 --- a/packages/jest-environment-puppeteer/README.md +++ b/packages/jest-environment-puppeteer/README.md @@ -77,6 +77,16 @@ it('should put test in debug mode', async () => { }) ``` +### `global.jestPuppeteer.resetPage()` + +Reset global.page + +```js +beforeEach(async () => { + await jestPuppeteer.resetPage() +}) +``` + ### `jest-puppeteer.config.js` You can specify a `jest-puppeteer.config.js` at the root of the project or define a custom path using `JEST_PUPPETEER_CONFIG` environment variable. It should export a config object or a Promise for a config object. diff --git a/packages/jest-environment-puppeteer/src/PuppeteerEnvironment.js b/packages/jest-environment-puppeteer/src/PuppeteerEnvironment.js index a6f6893f..456da960 100644 --- a/packages/jest-environment-puppeteer/src/PuppeteerEnvironment.js +++ b/packages/jest-environment-puppeteer/src/PuppeteerEnvironment.js @@ -57,11 +57,6 @@ class PuppeteerEnvironment extends NodeEnvironment { ) } - this.global.page = await this.global.context.newPage() - if (config && config.exitOnPageError) { - this.global.page.addListener('pageerror', handleError) - } - this.global.jestPuppeteer = { debug: async () => { // eslint-disable-next-line no-eval @@ -102,7 +97,20 @@ class PuppeteerEnvironment extends NodeEnvironment { stdin.on('data', onKeyPress) }) }, + resetPage: async () => { + if (this.global.page) { + this.global.page.removeListener('pageerror', handleError) + await this.global.page.close() + } + + this.global.page = await this.global.context.newPage() + if (config && config.exitOnPageError) { + this.global.page.addListener('pageerror', handleError) + } + }, } + + await this.global.jestPuppeteer.resetPage() } async teardown() { diff --git a/packages/jest-environment-puppeteer/tests/resetPage.test.js b/packages/jest-environment-puppeteer/tests/resetPage.test.js new file mode 100644 index 00000000..7ff56c98 --- /dev/null +++ b/packages/jest-environment-puppeteer/tests/resetPage.test.js @@ -0,0 +1,9 @@ +describe('resetPage', () => { + test('should reset page', async () => { + const oldPage = page + await jestPuppeteer.resetPage() + expect(page).not.toBe(oldPage) + expect(page.isClosed()).toBe(false) + expect(oldPage.isClosed()).toBe(true) + }) +})