Skip to content
This repository was archived by the owner on Jul 30, 2020. It is now read-only.

Commit 6faa701

Browse files
author
Brandon Carroll
committed
feat: mostly the same api as DTL
1 parent e55e8ce commit 6faa701

24 files changed

+117
-109
lines changed

babel.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
module.exports = {
22
presets: ['module:metro-react-native-babel-preset'],
3+
overrides: [
4+
{
5+
compact: false,
6+
},
7+
],
38
};

examples/__tests__/react-intl.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const renderWithReactIntl = component => {
3939
setupTests();
4040

4141
test('it should render FormattedDate and have a formatted pt date', () => {
42-
const { container } = renderWithReactIntl(<FormatDateView />);
42+
const { baseElement } = renderWithReactIntl(<FormatDateView />);
4343

44-
getByText(container, '11/03/2019');
44+
getByText(baseElement, '11/03/2019');
4545
});

examples/__tests__/react-navigation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ function renderWithNavigation({ screens = {}, navigatorConfig = {} } = {}) {
5151

5252
const App = createAppContainer(AppNavigator);
5353

54-
return { ...render(<App detached />), navigationContainer: App };
54+
return { ...render(<App detached />), navigationBaseElement: App };
5555
}
5656

5757
test('full app rendering/navigating', async () => {

examples/__tests__/update-props.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class NumberDisplay extends React.Component {
1717
}
1818
}
1919

20-
test('calling render with the same component on the same container does not remount', () => {
20+
test('calling render with the same component on the same baseElement does not remount', () => {
2121
const { getByTestId, rerender } = render(<NumberDisplay number={1} />);
2222
expect(getByTestId('number-display')).toHaveTextContent(1);
2323

src/lib/__tests__/debug.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ afterEach(() => {
1111
console.log.mockRestore();
1212
});
1313

14-
test('debug pretty prints the container', () => {
14+
test('debug pretty prints the baseElement', () => {
1515
const HelloWorld = () => <Text>Hello World</Text>;
1616
const { debug } = render(<HelloWorld />);
1717
debug();

src/lib/__tests__/events.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ Object.keys(eventMap).forEach(key => {
1313

1414
config.validTargets.forEach(element => {
1515
const handler = jest.fn();
16-
const { baseElement } = render(React.createElement(element, { [handlerName]: handler }));
16+
const { container } = render(React.createElement(element, { [handlerName]: handler }));
1717

18-
fireEvent[key](baseElement);
18+
fireEvent[key](container);
1919

2020
expect(handler).toHaveBeenCalledTimes(1);
2121
});
@@ -24,8 +24,8 @@ Object.keys(eventMap).forEach(key => {
2424

2525
test('onChange works', () => {
2626
const handleChange = jest.fn();
27-
const { baseElement } = render(<TextInput onChange={handleChange} />);
28-
fireEvent.change(baseElement, { target: { value: 'a' } });
27+
const { container } = render(<TextInput onChange={handleChange} />);
28+
fireEvent.change(container, { target: { value: 'a' } });
2929
expect(handleChange).toHaveBeenCalledTimes(1);
3030
});
3131

@@ -67,9 +67,9 @@ test('assigns target properties', async () => {
6767

6868
test('calling `fireEvent` directly works too', () => {
6969
const handleEvent = jest.fn();
70-
const { baseElement } = render(<Button onPress={handleEvent} title="test" />);
70+
const { container } = render(<Button onPress={handleEvent} title="test" />);
7171

72-
fireEvent(baseElement, new NativeEvent('press'));
72+
fireEvent(container, new NativeEvent('press'));
7373
expect(handleEvent).toBeCalledTimes(1);
7474
});
7575

@@ -78,8 +78,8 @@ test('calling a custom event works as well', () => {
7878
const onMyEvent = jest.fn(({ nativeEvent }) => expect(nativeEvent).toEqual({ value: 'testing' }));
7979
const MyComponent = ({ onMyEvent }) => <TextInput value="test" onChange={onMyEvent} />;
8080

81-
const { baseElement } = render(<MyComponent onMyEvent={onMyEvent} />);
82-
fireEvent(baseElement, new NativeEvent('myEvent', event));
81+
const { container } = render(<MyComponent onMyEvent={onMyEvent} />);
82+
fireEvent(container, new NativeEvent('myEvent', event));
8383

8484
expect(onMyEvent).toHaveBeenCalledWith({
8585
nativeEvent: { value: 'testing' },

src/lib/__tests__/fetch.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class Fetch extends React.Component {
3434
test('Fetch makes an API call and displays the greeting when load-greeting is clicked', async () => {
3535
fetch.mockResponseOnce(JSON.stringify({ data: { greeting: 'hello there' } }));
3636
const url = '/greeting';
37-
const { container, getByText } = render(<Fetch url={url} />);
37+
const { baseElement, getByText } = render(<Fetch url={url} />);
3838

3939
fireEvent.press(getByText('Fetch'));
4040

@@ -44,5 +44,5 @@ test('Fetch makes an API call and displays the greeting when load-greeting is cl
4444
expect(fetch).toHaveBeenCalledWith(url);
4545

4646
expect(getByText('hello there')).toHaveTextContent('hello there');
47-
expect(container).toMatchSnapshot();
47+
expect(baseElement).toMatchSnapshot();
4848
});

src/lib/__tests__/misc.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ import { Picker, View } from 'react-native';
44
import { fireEvent, render, queryByProp, queryByTestId } from '../';
55

66
test('queryByProp', () => {
7-
const { container } = render(
7+
const { baseElement } = render(
88
<View>
99
<View testID="foo" importantForAccessibility="no" />
1010
<View importantForAccessibility="no" />
1111
<View importantForAccessibility="no-hide-descendants" />
1212
</View>,
1313
);
1414

15-
expect(queryByTestId(container, 'foo')).not.toBeNull();
16-
expect(queryByProp('importantForAccessibility', container, 'auto')).toBeNull();
17-
expect(() => queryByProp('importantForAccessibility', container, /no/)).toThrow(
15+
expect(queryByTestId(baseElement, 'foo')).not.toBeNull();
16+
expect(queryByProp('importantForAccessibility', baseElement, 'auto')).toBeNull();
17+
expect(() => queryByProp('importantForAccessibility', baseElement, /no/)).toThrow(
1818
/multiple elements/,
1919
);
2020
});

src/lib/__tests__/pretty-print.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ import { render } from '../';
55
import { prettyPrint } from '../pretty-print';
66

77
test('it prints correctly with no children', () => {
8-
const { container } = render(<View />);
8+
const { baseElement } = render(<View />);
99

10-
expect(prettyPrint(container.toJSON())).toMatchInlineSnapshot(`"[36m<View />[39m"`);
10+
expect(prettyPrint(baseElement.toJSON())).toMatchInlineSnapshot(`"[36m<View />[39m"`);
1111
});
1212

1313
test('it prints correctly with one child', () => {
14-
const { container } = render(
14+
const { baseElement } = render(
1515
<View>
1616
<Text>Hello World!</Text>
1717
</View>,
1818
);
1919

20-
expect(prettyPrint(container.toJSON())).toMatchInlineSnapshot(`
20+
expect(prettyPrint(baseElement.toJSON())).toMatchInlineSnapshot(`
2121
"<View>
2222
<Text>
2323
Hello World!
@@ -27,14 +27,14 @@ test('it prints correctly with one child', () => {
2727
});
2828

2929
test('it prints correctly with multiple children', () => {
30-
const { container } = render(
30+
const { baseElement } = render(
3131
<View>
3232
<Text>Hello</Text>
3333
<Text>World!</Text>
3434
</View>,
3535
);
3636

37-
expect(prettyPrint(container.toJSON())).toMatchInlineSnapshot(`
37+
expect(prettyPrint(baseElement.toJSON())).toMatchInlineSnapshot(`
3838
"<View>
3939
<Text>
4040
Hello
@@ -47,11 +47,11 @@ test('it prints correctly with multiple children', () => {
4747
});
4848

4949
test('it supports truncating the output length', () => {
50-
const { container } = render(
50+
const { baseElement } = render(
5151
<View>
5252
<Text>Hello World!</Text>
5353
</View>,
5454
);
5555

56-
expect(prettyPrint(container.toJSON(), 5)).toMatch(/\.\.\./);
56+
expect(prettyPrint(baseElement.toJSON(), 5)).toMatch(/\.\.\./);
5757
});

src/lib/__tests__/render.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@ import { View } from 'react-native';
33
import { render } from '../';
44

55
test('renders View', () => {
6-
const { baseElement } = render(<View />);
7-
expect(baseElement).not.toBeNull();
6+
const { container } = render(<View />);
7+
expect(container).not.toBeNull();
88
});
99

10-
test('returns baseElement', () => {
11-
const { baseElement } = render(<View />);
12-
expect(baseElement).toBeTruthy();
10+
test('returns container', () => {
11+
const { container } = render(<View />);
12+
expect(container).toBeTruthy();
1313
});
1414

1515
test('renders options.wrapper around node', () => {
1616
const WrapperComponent = ({ children }) => <View testID="wrapper">{children}</View>;
1717

18-
const { container, getByTestId } = render(<View testID="inner" />, {
18+
const { baseElement, getByTestId } = render(<View testID="inner" />, {
1919
wrapper: WrapperComponent,
2020
});
2121

2222
expect(getByTestId('wrapper')).toBeTruthy();
23-
expect(container.toJSON()).toMatchInlineSnapshot(`
23+
expect(baseElement.toJSON()).toMatchInlineSnapshot(`
2424
<View
2525
testID="wrapper"
2626
>

src/lib/__tests__/stopwatch.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ const wait = time => new Promise(resolve => setTimeout(resolve, time));
4141

4242
test('unmounts a component', async () => {
4343
jest.spyOn(console, 'error').mockImplementation(() => {});
44-
const { unmount, getByTitle, container } = render(<StopWatch />);
44+
const { unmount, getByTitle, baseElement } = render(<StopWatch />);
4545
fireEvent.press(getByTitle('Start'));
4646

4747
unmount();
4848

49-
expect(container.toJSON()).toBeNull();
49+
expect(baseElement.toJSON()).toBeNull();
5050
await wait(() => expect(console.error).not.toHaveBeenCalled());
5151
});

src/lib/__tests__/wait-for-element-to-be-removed.fake-timers.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ test('requires an unempty array of elements to exist first', () => {
2525
});
2626

2727
test('times out after 4500ms by default', () => {
28-
const { baseElement } = render(<View />);
28+
const { container } = render(<View />);
2929
const promise = expect(
30-
waitForElementToBeRemoved(() => baseElement),
30+
waitForElementToBeRemoved(() => container),
3131
).rejects.toThrowErrorMatchingInlineSnapshot(`"Timed out in waitForElementToBeRemoved."`);
3232

3333
jest.advanceTimersByTime(4501);

src/lib/__tests__/wait-for-element.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ test('waits for element to appear in the document', async () => {
1212
expect(element).toBeTruthy();
1313
});
1414

15-
test('waits for element to appear in a specified container', async () => {
15+
test('waits for element to appear in a specified baseElement', async () => {
1616
const { rerender, getByTestId } = render(<View />);
1717
const promise = waitForElement(() => getByTestId('test'));
1818
setTimeout(() => rerender(<View testID="test" />));

src/lib/get-queries-for-element.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import * as defaultQueries from './queries';
22

3-
function getQueriesForElement(container, queries = defaultQueries) {
3+
function getQueriesForElement(baseElement, queries = defaultQueries) {
44
return Object.keys(queries).reduce((helpers, key) => {
55
const fn = queries[key];
6-
helpers[key] = fn.bind(null, container);
6+
helpers[key] = fn.bind(null, baseElement);
77
return helpers;
88
}, {});
99
}

src/lib/index.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@ function render(ui, { options = {}, wrapper: WrapperComponent } = {}) {
1212
const wrapUiIfNeeded = innerElement =>
1313
WrapperComponent ? <WrapperComponent>{innerElement}</WrapperComponent> : innerElement;
1414

15-
let container = {};
15+
let baseElement = {};
1616

1717
act(() => {
18-
container = TR.create(wrapUiIfNeeded(ui), options);
18+
baseElement = TR.create(wrapUiIfNeeded(ui), options);
1919
});
2020

2121
return {
22-
container,
23-
baseElement: queryHelpers.proxyUnsafeProperties(container.root),
24-
debug: () => console.log(prettyPrint(container.toJSON())),
25-
unmount: () => container.unmount(),
22+
baseElement,
23+
container: queryHelpers.proxyUnsafeProperties(baseElement.root),
24+
debug: () => console.log(prettyPrint(baseElement.toJSON())),
25+
unmount: () => baseElement.unmount(),
2626
rerender: rerenderUi => {
2727
act(() => {
28-
container.update(wrapUiIfNeeded(rerenderUi));
28+
baseElement.update(wrapUiIfNeeded(rerenderUi));
2929
});
3030
},
31-
...getQueriesForElement(container),
31+
...getQueriesForElement(baseElement),
3232
};
3333
}
3434

src/lib/queries/display-value.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { matches, fuzzyMatches, makeNormalizer, buildQueries, getBaseElement } from './all-utils';
1+
import { matches, fuzzyMatches, makeNormalizer, buildQueries, getContainer } from './all-utils';
22

33
function queryAllByDisplayValue(
4-
container,
4+
baseElement,
55
value,
66
{ filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
77
) {
8-
const baseElement = getBaseElement(container);
8+
const container = getContainer(baseElement);
99
const matcher = exact ? matches : fuzzyMatches;
1010
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
1111

12-
return Array.from(baseElement.findAll(n => ['TextInput', 'Picker'].includes(n.type)))
12+
return Array.from(container.findAll(n => ['TextInput', 'Picker'].includes(n.type)))
1313
.filter(filter)
1414
.filter(node => {
1515
if (node.type === 'Picker') {

src/lib/queries/role.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { buildQueries, getBaseElement } from './all-utils';
1+
import { buildQueries, getContainer } from './all-utils';
22

33
const validRoles = [
44
'adjustable',
@@ -34,11 +34,11 @@ const validTraits = [
3434
'text',
3535
];
3636

37-
function queryAllByRole(container, value, { filter = n => n } = {}) {
38-
const baseElement = getBaseElement(container);
37+
function queryAllByRole(baseElement, value, { filter = n => n } = {}) {
38+
const container = getContainer(baseElement);
3939

40-
const roleElements = baseElement.findAll(c => c.props.accessibilityRole);
41-
const traitElements = baseElement.findAll(c => c.props.accessibilityTraits);
40+
const roleElements = container.findAll(c => c.props.accessibilityRole);
41+
const traitElements = container.findAll(c => c.props.accessibilityTraits);
4242

4343
return [...roleElements, ...traitElements].filter(filter).filter(node => {
4444
const role = node.getProp('accessibilityRole');

src/lib/queries/text.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ import {
44
makeNormalizer,
55
getNodeText,
66
buildQueries,
7-
getBaseElement,
7+
getContainer,
88
} from './all-utils';
99

1010
function queryAllByText(
11-
container,
11+
baseElement,
1212
text,
1313
{ filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
1414
) {
15-
const baseElement = getBaseElement(container);
15+
const container = getContainer(baseElement);
1616
const matcher = exact ? matches : fuzzyMatches;
1717
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
1818

19-
return Array.from(baseElement.findAll(n => ['Button', 'TextInput', 'Text'].includes(n.type)))
19+
return Array.from(container.findAll(n => ['Button', 'TextInput', 'Text'].includes(n.type)))
2020
.filter(filter)
2121
.filter(node => matcher(getNodeText(node), node, text, matchNormalizer));
2222
}

src/lib/queries/title.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { buildQueries, matches, fuzzyMatches, makeNormalizer, getBaseElement } from './all-utils';
1+
import { buildQueries, matches, fuzzyMatches, makeNormalizer, getContainer } from './all-utils';
22

33
function queryAllByTitle(
4-
container,
4+
baseElement,
55
value,
66
{ filter = n => n, exact = true, collapseWhitespace, trim, normalizer } = {},
77
) {
8-
const baseElement = getBaseElement(container);
8+
const container = getContainer(baseElement);
99
const matcher = exact ? matches : fuzzyMatches;
1010
const matchNormalizer = makeNormalizer({ collapseWhitespace, trim, normalizer });
1111

12-
return Array.from(baseElement.findAll(n => ['Button', 'RefreshControl'].includes(n.type)))
12+
return Array.from(container.findAll(n => ['Button', 'RefreshControl'].includes(n.type)))
1313
.filter(filter)
1414
.filter(node => matcher(node.getProp('title'), node, value, matchNormalizer));
1515
}

0 commit comments

Comments
 (0)