// using only @testing-library/react-native
import React from 'react';
import { render } from '@testing-library/react-native';
import { View, Text, ScrollView, TextInput } from 'react-native';
import { walkthroughable } from '../walkthroughable';
const WalkthroughableView = walkthroughable(View);
const WalkthroughableText = walkthroughable(Text);
const WalkthroughableScrollView = walkthroughable(ScrollView);
const WalkthroughableTextInput = walkthroughable(TextInput);
const walkthroughableComponents = [
WalkthroughableView,
WalkthroughableText,
WalkthroughableScrollView,
WalkthroughableTextInput,
];
const nativeComponents = [View, Text, ScrollView, TextInput];
it('spreads the tour prop object on the wrapped component', () => {
const { getByTestId } = render(
// @ts-ignore - allow passing test-only props
);
const wrapped = getByTestId('wrapped');
expect(wrapped.props.keyForNum).toBe(1);
expect(wrapped.props.keyForStr).toBe('hello');
});
it('spreads the tour prop object on the wrapped component along with other flat props', () => {
const { getByTestId } = render(
// @ts-ignore - allow passing test-only props
);
const wrapped = getByTestId('wrapped');
expect(wrapped.props.keyForNum).toBe(1);
expect(wrapped.props.keyForStr).toBe('hello');
expect(wrapped.props.otherProp).toBe('the other prop');
});
it('spreads the tour prop object on the wrapped component not overriding the root props', () => {
const { getByTestId } = render(
// @ts-ignore - allow passing test-only props
);
const wrapped = getByTestId('wrapped');
expect(wrapped.props.keyForNum).toBe(2);
expect(wrapped.props.keyForStr).toBe('hello');
});
it('works with all types of react native built-in components', () => {
nativeComponents.forEach((_, key) => {
const WalkthroughableComponent = walkthroughableComponents[key] as any;
// use createElement to avoid JSX typing issues
const { getByTestId } = render(
// @ts-ignore - allow passing test-only props
React.createElement(WalkthroughableComponent, {
testID: `wrapped-${key}`,
tour: { keyForNum: 1, keyForStr: 'hello' },
})
);
const wrapped = getByTestId(`wrapped-${key}`);
expect(wrapped.props.keyForNum).toBe(1);
expect(wrapped.props.keyForStr).toBe('hello');
});
});