From f53beb7e46c8820e3ca35516229269b59b3734b7 Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Thu, 19 Sep 2019 11:14:16 -0700 Subject: [PATCH 1/2] feat: support for within across page loads --- src/index.js | 19 ++++++------------- tests/testcafe/within.js | 10 +++++++++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/index.js b/src/index.js index ca1662d..0776dd8 100644 --- a/src/index.js +++ b/src/index.js @@ -31,25 +31,18 @@ Object.keys(queries).forEach(queryName => { ) }) -export const within = async sel => { - const sanitizedSel = sel.replace(/"/g, "'") - await ClientFunction( - new Function( - ` - - window.TestcafeTestingLibrary = window.TestcafeTestingLibrary || {} - const elem = document.querySelector("${sanitizedSel}"); - window.TestcafeTestingLibrary["within_${sanitizedSel}"] = TestingLibraryDom.within(elem); +export const within = async selector => { + const sanitizedSelector = selector.replace(/"/g, "'") - `, - ), - )() const container = {} Object.keys(queries).forEach(queryName => { container[queryName] = Selector( new Function( - `return window.TestcafeTestingLibrary["within_${sanitizedSel}"].${queryName}(...arguments)`, + ` + window.TestcafeTestingLibrary = window.TestcafeTestingLibrary || {} + window.TestcafeTestingLibrary["within_${sanitizedSelector}"] = window.TestcafeTestingLibrary["within_${sanitizedSelector}"] || TestingLibraryDom.within(document.querySelector("${sanitizedSelector}")) + return window.TestcafeTestingLibrary["within_${sanitizedSelector}"].${queryName}(...arguments)`, ), ) }) diff --git a/tests/testcafe/within.js b/tests/testcafe/within.js index a649b70..bf6cec8 100644 --- a/tests/testcafe/within.js +++ b/tests/testcafe/within.js @@ -1,5 +1,5 @@ import { Selector } from 'testcafe' -import { within } from '../../src' +import { within, getByText as gbt } from '../../src' // eslint-disable-next-line babel/no-unused-expressions fixture`within` @@ -26,4 +26,12 @@ test('quotes in selector', async t => { .click(getByText('Button Text')) .expect(Selector('button').withExactText('Button Clicked').exists) .ok() +}); + +test('still works after browser page reload', async t => { + const nested = await within('#nested'); + await t.expect(nested.getByText('Button Text').exists).ok() + + await t.eval(() => location.reload(true)); + await t.expect(nested.getByText('Button Text').exists).ok() }) From cbd793e78f9b2af6e2bd987ec7ef5afedbf4c4bf Mon Sep 17 00:00:00 2001 From: Ben Monro Date: Sat, 21 Sep 2019 12:18:06 -0700 Subject: [PATCH 2/2] lint --- src/index.js | 2 +- tests/testcafe/within.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 0776dd8..66335a0 100644 --- a/src/index.js +++ b/src/index.js @@ -31,7 +31,7 @@ Object.keys(queries).forEach(queryName => { ) }) -export const within = async selector => { +export const within = selector => { const sanitizedSelector = selector.replace(/"/g, "'") const container = {} diff --git a/tests/testcafe/within.js b/tests/testcafe/within.js index bf6cec8..ad040e6 100644 --- a/tests/testcafe/within.js +++ b/tests/testcafe/within.js @@ -1,5 +1,5 @@ import { Selector } from 'testcafe' -import { within, getByText as gbt } from '../../src' +import { within } from '../../src' // eslint-disable-next-line babel/no-unused-expressions fixture`within`