Skip to content

Commit 56f3ded

Browse files
authored
Toast testkit driver (#2901)
* Added toast driver * Added toast sanity checks * Added usage of jest fake timers
1 parent f8b5b52 commit 56f3ded

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {ToastProps} from '../index';
2+
import {useComponentDriver, ComponentProps} from '../../testkit/new/Component.driver';
3+
import {TextDriver} from '../../components/text/Text.driver.new';
4+
import {ButtonDriver} from '../../components/button/Button.driver.new';
5+
6+
export const ToastDriver = (props: ComponentProps) => {
7+
const {renderTree, testID} = props;
8+
const driver = useComponentDriver<ToastProps>(props);
9+
const actionButtonDriver = ButtonDriver({renderTree, testID: `${testID}-action`});
10+
const messageDriver = TextDriver({renderTree, testID: `${testID}-message`});
11+
12+
const getMessage = () => {
13+
return messageDriver;
14+
};
15+
16+
const getAction = () => {
17+
return actionButtonDriver;
18+
};
19+
20+
return {...driver, getMessage, getAction};
21+
};
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import React from 'react';
2+
import {render} from '@testing-library/react-native';
3+
import Toast, {ToastProps} from '../index';
4+
import {ToastDriver} from '../Toast.driver.new';
5+
6+
const testID = 'toast';
7+
8+
const TestCase = (props: ToastProps) => {
9+
return <Toast visible testID={testID} {...props}/>;
10+
};
11+
12+
const getDriver = (props?: ToastProps) => {
13+
const renderTree = render(<TestCase {...props}/>);
14+
const toastDriver = ToastDriver({renderTree, testID});
15+
return {render, toastDriver};
16+
};
17+
18+
describe('Sanity checks', () => {
19+
it('Should show toast', () => {
20+
const {toastDriver} = getDriver();
21+
expect(toastDriver.exists()).toBeTruthy();
22+
});
23+
24+
it('Should dismiss after one second', async () => {
25+
jest.useFakeTimers();
26+
const TIME = 1000;
27+
const dismissFn = jest.fn();
28+
const {toastDriver} = getDriver({autoDismiss: TIME, onDismiss: dismissFn});
29+
expect(toastDriver.exists()).toBeTruthy();
30+
expect(dismissFn).not.toHaveBeenCalled();
31+
jest.advanceTimersByTime(TIME);
32+
expect(dismissFn).toHaveBeenCalledTimes(1);
33+
});
34+
35+
it('Should show an Hello World message', () => {
36+
const MESSAGE = 'Hello World';
37+
const {toastDriver} = getDriver({message: MESSAGE});
38+
expect(toastDriver.getMessage().getText()).toEqual(MESSAGE);
39+
});
40+
41+
it('Should press on action button', () => {
42+
const actionFn = jest.fn();
43+
const {toastDriver} = getDriver({action: {onPress: actionFn}});
44+
expect(actionFn).not.toHaveBeenCalled();
45+
toastDriver.getAction().press();
46+
expect(actionFn).toHaveBeenCalled();
47+
});
48+
});

0 commit comments

Comments
 (0)