Skip to content

Commit 3f88cac

Browse files
mdjastrzebskithymikee
authored andcommitted
feat: add getQueriesForElement alias to within (#461)
* feat: getQueriesForElement alias implementation & test * feat: added typescript types and tests * feat: updated docs
1 parent ae5f9d8 commit 3f88cac

File tree

7 files changed

+93
-8
lines changed

7 files changed

+93
-8
lines changed

src/__tests__/within.test.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// @flow
22
import React from 'react';
33
import { View, Text, TextInput } from 'react-native';
4-
import { render, within } from '..';
4+
import { render, within, getQueriesForElement } from '..';
55

66
test('within() exposes basic queries', async () => {
77
const rootQueries = render(
@@ -91,3 +91,7 @@ test('within() exposes a11y queries', async () => {
9191
secondQueries.findAllByA11yHint('Same Hint')
9292
).resolves.toHaveLength(1);
9393
});
94+
95+
test('getQueriesForElement is alias to within', () => {
96+
expect(getQueriesForElement).toBe(within);
97+
});

src/pure.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import render from './render';
77
import shallow from './shallow';
88
import waitFor, { waitForElement } from './waitFor';
99
import waitForElementToBeRemoved from './waitForElementToBeRemoved';
10-
import within from './within';
10+
import { within, getQueriesForElement } from './within';
1111

1212
export { act };
1313
export { cleanup };
@@ -17,4 +17,4 @@ export { render };
1717
export { shallow };
1818
export { waitFor, waitForElement };
1919
export { waitForElementToBeRemoved };
20-
export { within };
20+
export { within, getQueriesForElement };

src/within.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import { queryByAPI } from './helpers/queryByAPI';
44
import { findByAPI } from './helpers/findByAPI';
55
import a11yAPI from './helpers/a11yAPI';
66

7-
export default function within(instance: ReactTestInstance) {
7+
export function within(instance: ReactTestInstance) {
88
return {
99
...getByAPI(instance),
1010
...queryByAPI(instance),
1111
...findByAPI(instance),
1212
...a11yAPI(instance),
1313
};
1414
}
15+
16+
export const getQueriesForElement = within;

typings/__tests__/index.test.tsx

+73
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
waitForElementToBeRemoved,
1010
act,
1111
within,
12+
getQueriesForElement,
1213
} from '../..';
1314

1415
interface HasRequiredProp {
@@ -306,6 +307,18 @@ const withinGet: Array<ReactTestInstance> = [
306307
within(instance).getByRole('button'),
307308
within(instance).getByA11yState({ busy: true }),
308309
within(instance).getByA11yValue({ min: 10 }),
310+
getQueriesForElement(instance).getByText('Test'),
311+
getQueriesForElement(instance).getByDisplayValue('Test'),
312+
getQueriesForElement(instance).getByPlaceholderText('Test'),
313+
getQueriesForElement(instance).getByTestId('Test'),
314+
getQueriesForElement(instance).getByA11yLabel('Test'),
315+
getQueriesForElement(instance).getByLabelText('Test'),
316+
getQueriesForElement(instance).getByA11yHint('Test'),
317+
getQueriesForElement(instance).getByHintText('Test'),
318+
getQueriesForElement(instance).getByA11yRole('button'),
319+
getQueriesForElement(instance).getByRole('button'),
320+
getQueriesForElement(instance).getByA11yState({ busy: true }),
321+
getQueriesForElement(instance).getByA11yValue({ min: 10 }),
309322
];
310323

311324
const withinGetAll: Array<ReactTestInstance[]> = [
@@ -321,6 +334,18 @@ const withinGetAll: Array<ReactTestInstance[]> = [
321334
within(instance).getAllByRole('button'),
322335
within(instance).getAllByA11yState({ busy: true }),
323336
within(instance).getAllByA11yValue({ min: 10 }),
337+
getQueriesForElement(instance).getAllByText('Test'),
338+
getQueriesForElement(instance).getAllByDisplayValue('Test'),
339+
getQueriesForElement(instance).getAllByPlaceholderText('Test'),
340+
getQueriesForElement(instance).getAllByTestId('Test'),
341+
getQueriesForElement(instance).getAllByA11yLabel('Test'),
342+
getQueriesForElement(instance).getAllByLabelText('button'),
343+
getQueriesForElement(instance).getAllByA11yHint('Test'),
344+
getQueriesForElement(instance).getAllByHintText('button'),
345+
getQueriesForElement(instance).getAllByA11yRole('button'),
346+
getQueriesForElement(instance).getAllByRole('button'),
347+
getQueriesForElement(instance).getAllByA11yState({ busy: true }),
348+
getQueriesForElement(instance).getAllByA11yValue({ min: 10 }),
324349
];
325350

326351
const withinQuery: Array<ReactTestInstance | null> = [
@@ -336,6 +361,18 @@ const withinQuery: Array<ReactTestInstance | null> = [
336361
within(instance).queryByRole('button'),
337362
within(instance).queryByA11yState({ busy: true }),
338363
within(instance).queryByA11yValue({ min: 10 }),
364+
getQueriesForElement(instance).queryByText('Test'),
365+
getQueriesForElement(instance).queryByDisplayValue('Test'),
366+
getQueriesForElement(instance).queryByPlaceholderText('Test'),
367+
getQueriesForElement(instance).queryByTestId('Test'),
368+
getQueriesForElement(instance).queryByA11yLabel('Test'),
369+
getQueriesForElement(instance).queryByLabelText('button'),
370+
getQueriesForElement(instance).queryByA11yHint('Test'),
371+
getQueriesForElement(instance).queryByHintText('button'),
372+
getQueriesForElement(instance).queryByA11yRole('button'),
373+
getQueriesForElement(instance).queryByRole('button'),
374+
getQueriesForElement(instance).queryByA11yState({ busy: true }),
375+
getQueriesForElement(instance).queryByA11yValue({ min: 10 }),
339376
];
340377

341378
const withinQueryAll: Array<ReactTestInstance[]> = [
@@ -351,6 +388,18 @@ const withinQueryAll: Array<ReactTestInstance[]> = [
351388
within(instance).queryAllByRole('button'),
352389
within(instance).queryAllByA11yState({ busy: true }),
353390
within(instance).queryAllByA11yValue({ min: 10 }),
391+
getQueriesForElement(instance).queryAllByText('Test'),
392+
getQueriesForElement(instance).queryAllByDisplayValue('Test'),
393+
getQueriesForElement(instance).queryAllByPlaceholderText('Test'),
394+
getQueriesForElement(instance).queryAllByTestId('Test'),
395+
getQueriesForElement(instance).queryAllByA11yLabel('Test'),
396+
getQueriesForElement(instance).queryAllByLabelText('Test'),
397+
getQueriesForElement(instance).queryAllByA11yHint('Test'),
398+
getQueriesForElement(instance).queryAllByHintText('Test'),
399+
getQueriesForElement(instance).queryAllByA11yRole('button'),
400+
getQueriesForElement(instance).queryAllByRole('button'),
401+
getQueriesForElement(instance).queryAllByA11yState({ busy: true }),
402+
getQueriesForElement(instance).queryAllByA11yValue({ min: 10 }),
354403
];
355404

356405
const withinFind: Promise<ReactTestInstance>[] = [
@@ -366,6 +415,18 @@ const withinFind: Promise<ReactTestInstance>[] = [
366415
within(instance).findByRole('button'),
367416
within(instance).findByA11yState({ busy: true }),
368417
within(instance).findByA11yValue({ min: 10 }),
418+
getQueriesForElement(instance).findByText('Test'),
419+
getQueriesForElement(instance).findByDisplayValue('Test'),
420+
getQueriesForElement(instance).findByPlaceholderText('Test'),
421+
getQueriesForElement(instance).findByTestId('Test'),
422+
getQueriesForElement(instance).findByA11yLabel('Test'),
423+
getQueriesForElement(instance).findByLabelText('Test'),
424+
getQueriesForElement(instance).findByA11yHint('Test'),
425+
getQueriesForElement(instance).findByHintText('Test'),
426+
getQueriesForElement(instance).findByA11yRole('button'),
427+
getQueriesForElement(instance).findByRole('button'),
428+
getQueriesForElement(instance).findByA11yState({ busy: true }),
429+
getQueriesForElement(instance).findByA11yValue({ min: 10 }),
369430
];
370431

371432
const withinFindAll: Promise<ReactTestInstance[]>[] = [
@@ -381,4 +442,16 @@ const withinFindAll: Promise<ReactTestInstance[]>[] = [
381442
within(instance).findAllByRole('button'),
382443
within(instance).findAllByA11yState({ busy: true }),
383444
within(instance).findAllByA11yValue({ min: 10 }),
445+
getQueriesForElement(instance).findAllByText('Test'),
446+
getQueriesForElement(instance).findAllByDisplayValue('Test'),
447+
getQueriesForElement(instance).findAllByPlaceholderText('Test'),
448+
getQueriesForElement(instance).findAllByTestId('Test'),
449+
getQueriesForElement(instance).findAllByA11yLabel('Test'),
450+
getQueriesForElement(instance).findAllByLabelText('Test'),
451+
getQueriesForElement(instance).findAllByA11yHint('Test'),
452+
getQueriesForElement(instance).findAllByHintText('Test'),
453+
getQueriesForElement(instance).findAllByA11yRole('button'),
454+
getQueriesForElement(instance).findAllByRole('button'),
455+
getQueriesForElement(instance).findAllByA11yState({ busy: true }),
456+
getQueriesForElement(instance).findAllByA11yValue({ min: 10 }),
384457
];

typings/index.d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,9 @@ export declare const waitForElementToBeRemoved: WaitForElementToBeRemovedFunctio
346346

347347
export declare const act: (callback: () => void) => Thenable;
348348
export declare const within: (instance: ReactTestInstance) => Queries;
349+
export declare const getQueriesForElement: (
350+
instance: ReactTestInstance
351+
) => Queries;
349352

350353
/**
351354
* @deprecated This function has been removed. Please use `waitFor` function.

website/docs/API.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,10 @@ function waitForElementToBeRemoved<T>(
368368
Waits for non-deterministic periods of time until queried element is removed or times out. `waitForElementToBeRemoved` periodically calls `expectation` every `interval` milliseconds to determine whether the element has been removed or not.
369369

370370
```jsx
371-
import { render, waitForElementToBeRemoved } from 'react-native-testing-library';
371+
import {
372+
render,
373+
waitForElementToBeRemoved,
374+
} from 'react-native-testing-library';
372375

373376
test('waiting for an Banana to be removed', async () => {
374377
const { getByText } = render(<Banana />);
@@ -387,17 +390,18 @@ In order to properly use `waitForElementToBeRemoved` you need at least React >=1
387390

388391
If you're using Jest's [Timer Mocks](https://jestjs.io/docs/en/timer-mocks#docsNav), remember not to use `async/await` syntax as it will stall your tests.
389392

390-
## `within`
393+
## `within`, `getQueriesForElement`
391394

392395
- [`Example code`](https://github.com/callstack/react-native-testing-library/blob/master/src/__tests__/within.test.js)
393396

394397
Defined as:
395398

396399
```jsx
397400
function within(instance: ReactTestInstance): Queries
401+
function getQueriesForElement(instance: ReactTestInstance): Queries
398402
```
399403

400-
Perform [queries](./Queries.md) scoped to given element.
404+
`within` (also available as `getQueriesForElement` alias) performs [queries](./Queries.md) scoped to given element.
401405

402406
:::note
403407
Please note that additional `render` specific operations like `update`, `unmount`, `debug`, `toJSON` are _not_ included.

website/docs/MigrationV7.md

-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ This guide describes steps necessary to migrate from `@testing-library/react-nat
5050

5151
## Changed helpers
5252

53-
- `getQueriesForElement` is removed, rename it to `within`
5453
- `wait` and `waitForElement` is removed, rename these to `waitFor`
5554

5655
## Missing queries

0 commit comments

Comments
 (0)