@testing-library/react-native 12.2.1 → 12.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/config.d.ts +1 -0
- package/build/config.js.map +1 -1
- package/build/fireEvent.js +2 -1
- package/build/fireEvent.js.map +1 -1
- package/build/helpers/accessiblity.d.ts +7 -0
- package/build/helpers/accessiblity.js +73 -2
- package/build/helpers/accessiblity.js.map +1 -1
- package/build/helpers/component-tree.d.ts +7 -0
- package/build/helpers/component-tree.js +18 -0
- package/build/helpers/component-tree.js.map +1 -1
- package/build/helpers/format-default.d.ts +1 -2
- package/build/helpers/format-default.js +22 -13
- package/build/helpers/format-default.js.map +1 -1
- package/build/helpers/format.js +1 -4
- package/build/helpers/format.js.map +1 -1
- package/build/helpers/host-component-names.d.ts +5 -0
- package/build/helpers/host-component-names.js +13 -1
- package/build/helpers/host-component-names.js.map +1 -1
- package/build/helpers/matchers/accessibilityState.js +3 -3
- package/build/helpers/matchers/accessibilityState.js.map +1 -1
- package/build/helpers/matchers/accessibilityValue.js +3 -2
- package/build/helpers/matchers/accessibilityValue.js.map +1 -1
- package/build/helpers/matchers/matchLabelText.d.ts +1 -1
- package/build/helpers/matchers/matchLabelText.js +5 -8
- package/build/helpers/matchers/matchLabelText.js.map +1 -1
- package/build/helpers/matchers/matchTextContent.js +2 -2
- package/build/helpers/matchers/matchTextContent.js.map +1 -1
- package/build/helpers/{getTextContent.js → text-content.js} +1 -1
- package/build/helpers/text-content.js.map +1 -0
- package/build/helpers/text-input.d.ts +3 -0
- package/build/helpers/text-input.js +21 -0
- package/build/helpers/text-input.js.map +1 -0
- package/build/matchers/extend-expect.d.js +2 -0
- package/build/matchers/extend-expect.d.js.map +1 -0
- package/build/matchers/extend-expect.d.ts +2 -0
- package/build/matchers/extend-expect.js +26 -0
- package/build/matchers/extend-expect.js.map +1 -0
- package/build/matchers/index.d.ts +9 -0
- package/build/matchers/index.js +75 -0
- package/build/matchers/index.js.map +1 -0
- package/build/matchers/to-be-checked.d.ts +6 -0
- package/build/matchers/to-be-checked.js +31 -0
- package/build/matchers/to-be-checked.js.map +1 -0
- package/build/matchers/to-be-disabled.d.ts +10 -0
- package/build/matchers/to-be-disabled.js +52 -0
- package/build/matchers/to-be-disabled.js.map +1 -0
- package/build/matchers/to-be-empty-element.d.ts +6 -0
- package/build/matchers/to-be-empty-element.js +20 -0
- package/build/matchers/to-be-empty-element.js.map +1 -0
- package/build/matchers/to-be-on-the-screen.d.ts +6 -0
- package/build/matchers/to-be-on-the-screen.js +29 -0
- package/build/matchers/to-be-on-the-screen.js.map +1 -0
- package/build/matchers/to-be-partially-checked.d.ts +6 -0
- package/build/matchers/to-be-partially-checked.js +28 -0
- package/build/matchers/to-be-partially-checked.js.map +1 -0
- package/build/matchers/to-be-visible.d.ts +6 -0
- package/build/matchers/to-be-visible.js +56 -0
- package/build/matchers/to-be-visible.js.map +1 -0
- package/build/matchers/to-have-display-value.d.ts +7 -0
- package/build/matchers/to-have-display-value.js +26 -0
- package/build/matchers/to-have-display-value.js.map +1 -0
- package/build/matchers/to-have-prop.d.ts +6 -0
- package/build/matchers/to-have-prop.js +35 -0
- package/build/matchers/to-have-prop.js.map +1 -0
- package/build/matchers/to-have-text-content.d.ts +7 -0
- package/build/matchers/to-have-text-content.js +21 -0
- package/build/matchers/to-have-text-content.js.map +1 -0
- package/build/matchers/utils.d.ts +18 -0
- package/build/matchers/utils.js +90 -0
- package/build/matchers/utils.js.map +1 -0
- package/build/matches.d.ts +1 -1
- package/build/matches.js.map +1 -1
- package/build/queries/displayValue.js +4 -3
- package/build/queries/displayValue.js.map +1 -1
- package/build/queries/labelText.js +2 -2
- package/build/queries/labelText.js.map +1 -1
- package/build/queries/role.js +1 -1
- package/build/queries/role.js.map +1 -1
- package/build/render.d.ts +12 -48
- package/build/user-event/clear.js +2 -1
- package/build/user-event/clear.js.map +1 -1
- package/build/user-event/press/press.js +2 -1
- package/build/user-event/press/press.js.map +1 -1
- package/build/user-event/type/type.js +2 -1
- package/build/user-event/type/type.js.map +1 -1
- package/build/user-event/utils/index.d.ts +0 -1
- package/build/user-event/utils/index.js +0 -11
- package/build/user-event/utils/index.js.map +1 -1
- package/package.json +6 -23
- package/.DS_Store +0 -0
- package/.codecov.yml +0 -9
- package/.eslintcache +0 -1
- package/.eslintignore +0 -3
- package/.eslintrc +0 -19
- package/.flowconfig +0 -63
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
- package/.github/ISSUE_TEMPLATE/question.md +0 -9
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/actions/setup-deps/action.yml +0 -22
- package/.github/actions/setup-website-deps/action.yml +0 -22
- package/.github/dependabot.yml +0 -10
- package/.github/workflows/deploy-website.yml +0 -36
- package/.github/workflows/example-apps.yml +0 -25
- package/.github/workflows/main.yml +0 -103
- package/.gitignore +0 -11
- package/.prettierrc.js +0 -5
- package/CODE_OF_CONDUCT.md +0 -73
- package/CONTRIBUTING.md +0 -64
- package/babel.config.js +0 -22
- package/build/helpers/getTextContent.js.map +0 -1
- package/build/user-event/utils/host-components.d.ts +0 -2
- package/build/user-event/utils/host-components.js +0 -11
- package/build/user-event/utils/host-components.js.map +0 -1
- package/examples/basic/.expo/README.md +0 -15
- package/examples/basic/.expo/packager-info.json +0 -4
- package/examples/basic/.expo/settings.json +0 -10
- package/examples/basic/.expo-shared/assets.json +0 -4
- package/examples/basic/.gitignore +0 -14
- package/examples/basic/App.tsx +0 -20
- package/examples/basic/README.md +0 -11
- package/examples/basic/__tests__/App.test.tsx +0 -137
- package/examples/basic/app.json +0 -31
- package/examples/basic/assets/adaptive-icon.png +0 -0
- package/examples/basic/assets/favicon.png +0 -0
- package/examples/basic/assets/icon.png +0 -0
- package/examples/basic/assets/splash.png +0 -0
- package/examples/basic/babel.config.js +0 -6
- package/examples/basic/components/Home.tsx +0 -28
- package/examples/basic/components/LoginForm.tsx +0 -138
- package/examples/basic/jest-setup.ts +0 -7
- package/examples/basic/jest.config.js +0 -5
- package/examples/basic/package.json +0 -30
- package/examples/basic/tsconfig.json +0 -7
- package/examples/basic/yarn.lock +0 -7499
- package/examples/react-navigation/README.md +0 -16
- package/examples/react-navigation/babel.config.js +0 -4
- package/examples/react-navigation/jest-setup.js +0 -11
- package/examples/react-navigation/jest.config.js +0 -10
- package/examples/react-navigation/package.json +0 -31
- package/examples/react-navigation/src/App.js +0 -21
- package/examples/react-navigation/src/DrawerNavigator.js +0 -15
- package/examples/react-navigation/src/DrawerNavigator.test.js +0 -42
- package/examples/react-navigation/src/NativeStackNavigator.js +0 -15
- package/examples/react-navigation/src/NativeStackNavigator.test.js +0 -34
- package/examples/react-navigation/src/StackNavigator.js +0 -15
- package/examples/react-navigation/src/StackNavigator.test.js +0 -34
- package/examples/react-navigation/src/TabNavigator.js +0 -15
- package/examples/react-navigation/src/TabNavigator.test.js +0 -21
- package/examples/react-navigation/src/screens/DetailsScreen.js +0 -43
- package/examples/react-navigation/src/screens/DetailsScreen.test.js +0 -27
- package/examples/react-navigation/src/screens/DrawerHomeScreen.js +0 -26
- package/examples/react-navigation/src/screens/HomeScreen.js +0 -48
- package/examples/react-navigation/src/screens/SettingsScreen.js +0 -20
- package/examples/react-navigation/src/test-utils.js +0 -12
- package/examples/react-navigation/yarn.lock +0 -5018
- package/examples/redux/App.js +0 -27
- package/examples/redux/README.md +0 -5
- package/examples/redux/actions/todoActions.js +0 -25
- package/examples/redux/babel.config.js +0 -6
- package/examples/redux/components/AddTodo.js +0 -73
- package/examples/redux/components/AddTodo.test.js +0 -27
- package/examples/redux/components/TodoElem.js +0 -25
- package/examples/redux/components/TodoList.js +0 -29
- package/examples/redux/components/TodoList.test.js +0 -34
- package/examples/redux/index.js +0 -8
- package/examples/redux/jest-setup.js +0 -2
- package/examples/redux/jest.config.js +0 -4
- package/examples/redux/package.json +0 -23
- package/examples/redux/reducers/index.js +0 -6
- package/examples/redux/reducers/todoReducer.js +0 -27
- package/examples/redux/store.js +0 -10
- package/examples/redux/test-utils.js +0 -11
- package/examples/redux/yarn.lock +0 -4819
- package/experiments-app/.expo/README.md +0 -15
- package/experiments-app/.expo/devices.json +0 -3
- package/experiments-app/.expo/packager-info.json +0 -9
- package/experiments-app/.expo/settings.json +0 -9
- package/experiments-app/.gitignore +0 -17
- package/experiments-app/.prettierrc.js +0 -5
- package/experiments-app/app.json +0 -30
- package/experiments-app/assets/adaptive-icon.png +0 -0
- package/experiments-app/assets/favicon.png +0 -0
- package/experiments-app/assets/icon.png +0 -0
- package/experiments-app/assets/splash.png +0 -0
- package/experiments-app/babel.config.js +0 -6
- package/experiments-app/index.js +0 -4
- package/experiments-app/package.json +0 -29
- package/experiments-app/src/App.tsx +0 -31
- package/experiments-app/src/MainScreen.tsx +0 -52
- package/experiments-app/src/experiments.ts +0 -35
- package/experiments-app/src/screens/FlatListEvents.tsx +0 -57
- package/experiments-app/src/screens/ScrollViewEvents.tsx +0 -65
- package/experiments-app/src/screens/SectionListEvents.tsx +0 -91
- package/experiments-app/src/screens/TextInputEventPropagation.tsx +0 -42
- package/experiments-app/src/screens/TextInputEvents.tsx +0 -48
- package/experiments-app/src/utils/helpers.ts +0 -18
- package/experiments-app/tsconfig.json +0 -6
- package/experiments-app/yarn.lock +0 -6709
- package/experiments-rtl/.babelrc +0 -8
- package/experiments-rtl/.eslintrc.json +0 -3
- package/experiments-rtl/.gitignore +0 -35
- package/experiments-rtl/README.md +0 -34
- package/experiments-rtl/jest-setup.js +0 -1
- package/experiments-rtl/jest.config.js +0 -4
- package/experiments-rtl/next.config.js +0 -4
- package/experiments-rtl/package.json +0 -38
- package/experiments-rtl/postcss.config.js +0 -6
- package/experiments-rtl/public/next.svg +0 -1
- package/experiments-rtl/public/vercel.svg +0 -1
- package/experiments-rtl/src/app/__tests__/click.test.tsx +0 -31
- package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +0 -51
- package/experiments-rtl/src/app/globals.css +0 -27
- package/experiments-rtl/src/app/layout.tsx +0 -22
- package/experiments-rtl/src/app/page.tsx +0 -113
- package/experiments-rtl/tailwind.config.ts +0 -20
- package/experiments-rtl/tsconfig.json +0 -28
- package/experiments-rtl/yarn.lock +0 -5418
- package/flow-typed/npm/jest_v26.x.x.js +0 -1218
- package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -81
- package/jest-setup.ts +0 -10
- package/renovate.json +0 -19
- package/scripts/test_react_17 +0 -12
- package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +0 -548
- package/src/__tests__/__snapshots__/render.test.tsx.snap +0 -39
- package/src/__tests__/act.test.tsx +0 -56
- package/src/__tests__/auto-cleanup-skip.test.tsx +0 -39
- package/src/__tests__/auto-cleanup.test.tsx +0 -50
- package/src/__tests__/cleanup.test.tsx +0 -26
- package/src/__tests__/config.test.ts +0 -55
- package/src/__tests__/fireEvent-textInput.test.tsx +0 -154
- package/src/__tests__/fireEvent.test.tsx +0 -485
- package/src/__tests__/host-component-names.test.tsx +0 -109
- package/src/__tests__/host-text-nesting.test.tsx +0 -90
- package/src/__tests__/jest-native.test.tsx +0 -84
- package/src/__tests__/questionsBoard.test.tsx +0 -62
- package/src/__tests__/react-native-api.test.tsx +0 -126
- package/src/__tests__/render-debug.test.tsx +0 -207
- package/src/__tests__/render-stringValidation.test.tsx +0 -157
- package/src/__tests__/render.test.tsx +0 -256
- package/src/__tests__/renderHook.test.tsx +0 -114
- package/src/__tests__/screen.test.tsx +0 -66
- package/src/__tests__/timerUtils.ts +0 -7
- package/src/__tests__/timers.test.ts +0 -27
- package/src/__tests__/waitFor.test.tsx +0 -327
- package/src/__tests__/waitForElementToBeRemoved.test.tsx +0 -151
- package/src/__tests__/within.test.tsx +0 -96
- package/src/act.ts +0 -86
- package/src/cleanup.ts +0 -15
- package/src/config.ts +0 -72
- package/src/fireEvent.ts +0 -159
- package/src/flush-micro-tasks.ts +0 -30
- package/src/helpers/__tests__/accessiblity.test.tsx +0 -373
- package/src/helpers/__tests__/component-tree.test.tsx +0 -226
- package/src/helpers/__tests__/format-default.tsx +0 -114
- package/src/helpers/__tests__/getTextContent.test.tsx +0 -49
- package/src/helpers/__tests__/includeHiddenElements.test.tsx +0 -39
- package/src/helpers/__tests__/query-name.test.ts +0 -10
- package/src/helpers/__tests__/timers.test.ts +0 -8
- package/src/helpers/accessiblity.ts +0 -108
- package/src/helpers/component-tree.ts +0 -94
- package/src/helpers/debugDeep.ts +0 -27
- package/src/helpers/debugShallow.ts +0 -22
- package/src/helpers/deprecation.ts +0 -53
- package/src/helpers/errors.ts +0 -66
- package/src/helpers/findAll.ts +0 -70
- package/src/helpers/format-default.ts +0 -72
- package/src/helpers/format.ts +0 -47
- package/src/helpers/getTextContent.ts +0 -20
- package/src/helpers/host-component-names.tsx +0 -88
- package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +0 -34
- package/src/helpers/matchers/__tests__/matchObject.test.ts +0 -37
- package/src/helpers/matchers/__tests__/matchStringValue.test.ts +0 -15
- package/src/helpers/matchers/accessibilityState.ts +0 -48
- package/src/helpers/matchers/accessibilityValue.ts +0 -24
- package/src/helpers/matchers/matchArrayProp.ts +0 -21
- package/src/helpers/matchers/matchLabelText.ts +0 -50
- package/src/helpers/matchers/matchObjectProp.ts +0 -25
- package/src/helpers/matchers/matchStringProp.ts +0 -23
- package/src/helpers/matchers/matchTextContent.ts +0 -20
- package/src/helpers/pointer-events.ts +0 -27
- package/src/helpers/query-name.ts +0 -4
- package/src/helpers/stringValidation.ts +0 -36
- package/src/helpers/timers.ts +0 -98
- package/src/index.ts +0 -33
- package/src/matches.ts +0 -49
- package/src/pure.ts +0 -27
- package/src/queries/__tests__/a11yState.test.tsx +0 -439
- package/src/queries/__tests__/a11yValue.test.tsx +0 -309
- package/src/queries/__tests__/displayValue.test.tsx +0 -221
- package/src/queries/__tests__/hintText.test.tsx +0 -177
- package/src/queries/__tests__/labelText.test.tsx +0 -242
- package/src/queries/__tests__/makeQueries.test.tsx +0 -235
- package/src/queries/__tests__/placeholderText.test.tsx +0 -136
- package/src/queries/__tests__/role-value.test.tsx +0 -176
- package/src/queries/__tests__/role.test.tsx +0 -824
- package/src/queries/__tests__/testId.test.tsx +0 -200
- package/src/queries/__tests__/text.test.tsx +0 -556
- package/src/queries/a11yState.ts +0 -127
- package/src/queries/a11yValue.ts +0 -127
- package/src/queries/displayValue.ts +0 -71
- package/src/queries/hintText.ts +0 -107
- package/src/queries/labelText.ts +0 -57
- package/src/queries/makeQueries.ts +0 -255
- package/src/queries/options.ts +0 -14
- package/src/queries/placeholderText.ts +0 -72
- package/src/queries/role.ts +0 -131
- package/src/queries/testId.ts +0 -66
- package/src/queries/text.ts +0 -63
- package/src/queries/unsafeProps.ts +0 -76
- package/src/queries/unsafeType.ts +0 -73
- package/src/react-versions.ts +0 -11
- package/src/render-act.ts +0 -19
- package/src/render.tsx +0 -183
- package/src/renderHook.tsx +0 -56
- package/src/screen.ts +0 -123
- package/src/shallow.ts +0 -18
- package/src/test-utils/events.ts +0 -24
- package/src/test-utils/index.ts +0 -1
- package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +0 -269
- package/src/user-event/__tests__/clear.test.tsx +0 -217
- package/src/user-event/clear.ts +0 -59
- package/src/user-event/event-builder/common.ts +0 -66
- package/src/user-event/event-builder/index.ts +0 -7
- package/src/user-event/event-builder/text-input.ts +0 -86
- package/src/user-event/index.ts +0 -18
- package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +0 -117
- package/src/user-event/press/__tests__/longPress.test.tsx +0 -157
- package/src/user-event/press/__tests__/press.real-timers.test.tsx +0 -320
- package/src/user-event/press/__tests__/press.test.tsx +0 -457
- package/src/user-event/press/constants.ts +0 -7
- package/src/user-event/press/index.ts +0 -1
- package/src/user-event/press/press.ts +0 -163
- package/src/user-event/setup/index.ts +0 -2
- package/src/user-event/setup/setup.ts +0 -142
- package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +0 -339
- package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +0 -668
- package/src/user-event/type/__tests__/parseKeys.test.ts +0 -23
- package/src/user-event/type/__tests__/type-managed.test.tsx +0 -120
- package/src/user-event/type/__tests__/type.test.tsx +0 -335
- package/src/user-event/type/index.ts +0 -1
- package/src/user-event/type/parseKeys.ts +0 -41
- package/src/user-event/type/type.ts +0 -138
- package/src/user-event/utils/__tests__/dispatch-event.test.tsx +0 -41
- package/src/user-event/utils/__tests__/wait.test.ts +0 -62
- package/src/user-event/utils/content-size.ts +0 -25
- package/src/user-event/utils/dispatch-event.ts +0 -38
- package/src/user-event/utils/host-components.ts +0 -6
- package/src/user-event/utils/index.ts +0 -6
- package/src/user-event/utils/text-range.ts +0 -4
- package/src/user-event/utils/wait.ts +0 -15
- package/src/user-event/utils/warn-about-real-timers.ts +0 -13
- package/src/waitFor.ts +0 -228
- package/src/waitForElementToBeRemoved.ts +0 -42
- package/src/within.ts +0 -30
- package/tsconfig.json +0 -17
- package/tsconfig.release.json +0 -8
- package/website/.gitignore +0 -20
- package/website/README.md +0 -33
- package/website/docker/.dockerignore +0 -3
- package/website/docker/Dockerfile +0 -9
- package/website/docker/docker-compose.yml +0 -11
- package/website/docs/API.md +0 -940
- package/website/docs/EslintPLluginTestingLibrary.md +0 -28
- package/website/docs/FAQ.md +0 -44
- package/website/docs/GettingStarted.md +0 -100
- package/website/docs/HowShouldIQuery.md +0 -21
- package/website/docs/MigrationV11.md +0 -64
- package/website/docs/MigrationV12.md +0 -67
- package/website/docs/MigrationV2.md +0 -126
- package/website/docs/MigrationV7.md +0 -119
- package/website/docs/MigrationV9.md +0 -67
- package/website/docs/Queries.md +0 -572
- package/website/docs/ReactNavigation.md +0 -371
- package/website/docs/ReduxIntegration.md +0 -137
- package/website/docs/TestingEnvironment.md +0 -154
- package/website/docs/Troubleshooting.md +0 -44
- package/website/docs/UnderstandingAct.md +0 -227
- package/website/docs/UserEvent.md +0 -191
- package/website/docusaurus.config.js +0 -114
- package/website/package.json +0 -31
- package/website/sidebars.js +0 -20
- package/website/src/components/Feature.js +0 -31
- package/website/src/css/custom.css +0 -13
- package/website/src/css/index.module.css +0 -77
- package/website/src/pages/index.js +0 -82
- package/website/static/.nojekyll +0 -0
- package/website/static/css/custom.css +0 -28
- package/website/static/img/hit.png +0 -0
- package/website/static/img/locomotive.png +0 -0
- package/website/static/img/owl.png +0 -0
- package/website/static/img/tools.png +0 -0
- package/website/yarn.lock +0 -7669
- package/yarn.lock +0 -7765
- /package/build/helpers/{getTextContent.d.ts → text-content.d.ts} +0 -0
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
render,
|
|
4
|
-
screen,
|
|
5
|
-
fireEvent,
|
|
6
|
-
userEvent,
|
|
7
|
-
} from '@testing-library/react-native';
|
|
8
|
-
import App from '../App';
|
|
9
|
-
|
|
10
|
-
jest.useFakeTimers();
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* A good place to start is having a tests that your component renders correctly.
|
|
14
|
-
*/
|
|
15
|
-
test('renders correctly', () => {
|
|
16
|
-
// Idiom: no need to capture render output, as we will use `screen` for queries.
|
|
17
|
-
render(<App />);
|
|
18
|
-
|
|
19
|
-
// Idiom: `getBy*` queries are predicates by themselves, but we will use it with `expect().toBeOnTheScreen()`
|
|
20
|
-
// to clarify our intent.
|
|
21
|
-
expect(
|
|
22
|
-
screen.getByRole('header', { name: 'Sign in to Example App' })
|
|
23
|
-
).toBeOnTheScreen();
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Hint: It's best when your tests are similar to what a manual test scenarions would look like,
|
|
28
|
-
* i.e. a series of actions taken by the user, followed by a series of assertions verified from
|
|
29
|
-
* his point of view.
|
|
30
|
-
*/
|
|
31
|
-
test('User can sign in successully with correct credentials', async () => {
|
|
32
|
-
// Setup User Event instance for realistic simulation of user interaction.
|
|
33
|
-
const user = userEvent.setup();
|
|
34
|
-
|
|
35
|
-
// Idiom: no need to capture render output, as we will use `screen` for queries.
|
|
36
|
-
render(<App />);
|
|
37
|
-
|
|
38
|
-
// Idiom: `getBy*` queries are predicates by themselves, but we will use it with `expect().toBeOnTheScreen()`
|
|
39
|
-
// to clarify our intent.
|
|
40
|
-
expect(
|
|
41
|
-
screen.getByRole('header', { name: 'Sign in to Example App' })
|
|
42
|
-
).toBeOnTheScreen();
|
|
43
|
-
|
|
44
|
-
// Hint: we can use `getByLabelText` to find our text inputs using their labels.
|
|
45
|
-
await user.type(screen.getByLabelText('Username'), 'admin');
|
|
46
|
-
await user.type(screen.getByLabelText('Password'), 'admin1');
|
|
47
|
-
|
|
48
|
-
// Hint: we can use `getByRole` to find our button with given text.
|
|
49
|
-
await user.press(screen.getByRole('button', { name: 'Sign In' }));
|
|
50
|
-
|
|
51
|
-
// Idiom: since pressing button triggers async operation we need to use `findBy*` query to wait
|
|
52
|
-
// for the action to complete.
|
|
53
|
-
// Hint: subsequent queries do not need to use `findBy*`, because they are used after the async action
|
|
54
|
-
// already finished
|
|
55
|
-
expect(
|
|
56
|
-
await screen.findByRole('header', { name: 'Welcome admin!' })
|
|
57
|
-
).toBeOnTheScreen();
|
|
58
|
-
|
|
59
|
-
// Idiom: use `queryBy*` with `expect().not.toBeOnTheScreen()` to assess that element is not present.
|
|
60
|
-
expect(
|
|
61
|
-
screen.queryByRole('header', { name: 'Sign in to Example App' })
|
|
62
|
-
).not.toBeOnTheScreen();
|
|
63
|
-
expect(screen.queryByLabelText('Username')).not.toBeOnTheScreen();
|
|
64
|
-
expect(screen.queryByLabelText('Password')).not.toBeOnTheScreen();
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Another test case based on manual test scenario.
|
|
69
|
-
*
|
|
70
|
-
* Hint: Try to tests what a user would see and do, instead of assering internal component state
|
|
71
|
-
* that is not directly reflected in the UI.
|
|
72
|
-
*
|
|
73
|
-
* For this reason prefer quries that correspond to things directly observable by the user like:
|
|
74
|
-
* `getByRole`, `getByText`, `getByLabelText`, `getByPlaceholderText, `getByDisplayValue`, etc.
|
|
75
|
-
* over `getByTestId` which is not directly observable by the user.
|
|
76
|
-
*
|
|
77
|
-
* Note: that some times you will have to resort to `getByTestId`, but treat it as a last resort.
|
|
78
|
-
*/
|
|
79
|
-
test('User will see errors for incorrect credentials', async () => {
|
|
80
|
-
const user = userEvent.setup();
|
|
81
|
-
render(<App />);
|
|
82
|
-
|
|
83
|
-
expect(
|
|
84
|
-
screen.getByRole('header', { name: 'Sign in to Example App' })
|
|
85
|
-
).toBeOnTheScreen();
|
|
86
|
-
|
|
87
|
-
await user.type(screen.getByLabelText('Username'), 'admin');
|
|
88
|
-
await user.type(screen.getByLabelText('Password'), 'qwerty123');
|
|
89
|
-
await user.press(screen.getByRole('button', { name: 'Sign In' }));
|
|
90
|
-
|
|
91
|
-
// Hint: you can use custom Jest Native matcher to check text content.
|
|
92
|
-
expect(await screen.findByRole('alert')).toHaveTextContent(
|
|
93
|
-
'Incorrect username or password'
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
expect(
|
|
97
|
-
screen.getByRole('header', { name: 'Sign in to Example App' })
|
|
98
|
-
).toBeOnTheScreen();
|
|
99
|
-
expect(screen.getByLabelText('Username')).toBeOnTheScreen();
|
|
100
|
-
expect(screen.getByLabelText('Password')).toBeOnTheScreen();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Do not be afraid to write longer test scenarios, with repeating act and assert statements.
|
|
105
|
-
*/
|
|
106
|
-
test('User can sign in after incorrect attempt', async () => {
|
|
107
|
-
const user = userEvent.setup();
|
|
108
|
-
render(<App />);
|
|
109
|
-
|
|
110
|
-
expect(
|
|
111
|
-
screen.getByRole('header', { name: 'Sign in to Example App' })
|
|
112
|
-
).toBeOnTheScreen();
|
|
113
|
-
|
|
114
|
-
const usernameInput = screen.getByLabelText('Username');
|
|
115
|
-
const passwordInput = screen.getByLabelText('Password');
|
|
116
|
-
|
|
117
|
-
await user.type(usernameInput, 'admin');
|
|
118
|
-
await user.type(passwordInput, 'qwerty123');
|
|
119
|
-
await user.press(screen.getByRole('button', { name: 'Sign In' }));
|
|
120
|
-
|
|
121
|
-
expect(await screen.findByRole('alert')).toHaveTextContent(
|
|
122
|
-
'Incorrect username or password'
|
|
123
|
-
);
|
|
124
|
-
|
|
125
|
-
// Workaround for clearing TextInput, clear() function will be added soon.
|
|
126
|
-
fireEvent.changeText(passwordInput, '');
|
|
127
|
-
|
|
128
|
-
await user.type(passwordInput, 'admin1');
|
|
129
|
-
await user.press(screen.getByRole('button', { name: 'Sign In' }));
|
|
130
|
-
|
|
131
|
-
expect(await screen.findByText('Welcome admin!')).toBeOnTheScreen();
|
|
132
|
-
expect(
|
|
133
|
-
screen.queryByRole('header', { name: 'Sign in to Example App' })
|
|
134
|
-
).not.toBeOnTheScreen();
|
|
135
|
-
expect(screen.queryByLabelText('Username')).not.toBeOnTheScreen();
|
|
136
|
-
expect(screen.queryByLabelText('Password')).not.toBeOnTheScreen();
|
|
137
|
-
});
|
package/examples/basic/app.json
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"expo": {
|
|
3
|
-
"name": "RNTL Example Basic",
|
|
4
|
-
"slug": "rntl-example-basic",
|
|
5
|
-
"version": "1.0.0",
|
|
6
|
-
"orientation": "portrait",
|
|
7
|
-
"icon": "./assets/icon.png",
|
|
8
|
-
"userInterfaceStyle": "light",
|
|
9
|
-
"splash": {
|
|
10
|
-
"image": "./assets/splash.png",
|
|
11
|
-
"resizeMode": "contain",
|
|
12
|
-
"backgroundColor": "#ffffff"
|
|
13
|
-
},
|
|
14
|
-
"updates": {
|
|
15
|
-
"fallbackToCacheTimeout": 0
|
|
16
|
-
},
|
|
17
|
-
"assetBundlePatterns": ["**/*"],
|
|
18
|
-
"ios": {
|
|
19
|
-
"supportsTablet": true
|
|
20
|
-
},
|
|
21
|
-
"android": {
|
|
22
|
-
"adaptiveIcon": {
|
|
23
|
-
"foregroundImage": "./assets/adaptive-icon.png",
|
|
24
|
-
"backgroundColor": "#FFFFFF"
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
"web": {
|
|
28
|
-
"favicon": "./assets/favicon.png"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { StyleSheet, View, Text } from 'react-native';
|
|
3
|
-
|
|
4
|
-
type Props = {
|
|
5
|
-
user: string;
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
export function Home({ user }: Props) {
|
|
9
|
-
return (
|
|
10
|
-
<View style={styles.container}>
|
|
11
|
-
<Text accessibilityRole="header" style={styles.title}>
|
|
12
|
-
Welcome {user}!
|
|
13
|
-
</Text>
|
|
14
|
-
</View>
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const styles = StyleSheet.create({
|
|
19
|
-
container: {
|
|
20
|
-
padding: 20,
|
|
21
|
-
},
|
|
22
|
-
title: {
|
|
23
|
-
alignSelf: 'center',
|
|
24
|
-
fontSize: 24,
|
|
25
|
-
marginTop: 8,
|
|
26
|
-
marginBottom: 40,
|
|
27
|
-
},
|
|
28
|
-
});
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
StyleSheet,
|
|
4
|
-
View,
|
|
5
|
-
Text,
|
|
6
|
-
TextInput,
|
|
7
|
-
Pressable,
|
|
8
|
-
ActivityIndicator,
|
|
9
|
-
} from 'react-native';
|
|
10
|
-
|
|
11
|
-
type Props = {
|
|
12
|
-
onLoginSuccess: (user: string) => void;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export function LoginForm({ onLoginSuccess }: Props) {
|
|
16
|
-
const [username, setUsername] = React.useState('');
|
|
17
|
-
const [password, setPassword] = React.useState('');
|
|
18
|
-
const [error, setError] = React.useState<string | undefined>();
|
|
19
|
-
const [isLoading, setIsLoading] = React.useState(false);
|
|
20
|
-
|
|
21
|
-
const handleSignIn = async () => {
|
|
22
|
-
setIsLoading(true);
|
|
23
|
-
|
|
24
|
-
const user = await authUser(username, password);
|
|
25
|
-
setIsLoading(false);
|
|
26
|
-
|
|
27
|
-
if (user) {
|
|
28
|
-
setError(undefined);
|
|
29
|
-
onLoginSuccess(user);
|
|
30
|
-
} else {
|
|
31
|
-
setError('Incorrect username or password');
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<View style={styles.container}>
|
|
37
|
-
<Text accessibilityRole="header" style={styles.title}>
|
|
38
|
-
Sign in to Example App
|
|
39
|
-
</Text>
|
|
40
|
-
|
|
41
|
-
<Text style={styles.textLabel}>Username</Text>
|
|
42
|
-
<TextInput
|
|
43
|
-
value={username}
|
|
44
|
-
onChangeText={setUsername}
|
|
45
|
-
accessibilityLabel="Username"
|
|
46
|
-
autoCapitalize="none"
|
|
47
|
-
style={styles.textInput}
|
|
48
|
-
/>
|
|
49
|
-
|
|
50
|
-
<Text style={styles.textLabel}>Password</Text>
|
|
51
|
-
<TextInput
|
|
52
|
-
value={password}
|
|
53
|
-
onChangeText={setPassword}
|
|
54
|
-
accessibilityLabel="Password"
|
|
55
|
-
secureTextEntry={true}
|
|
56
|
-
style={styles.textInput}
|
|
57
|
-
/>
|
|
58
|
-
|
|
59
|
-
{error && (
|
|
60
|
-
<Text accessibilityRole="alert" style={styles.validator}>
|
|
61
|
-
{error}
|
|
62
|
-
</Text>
|
|
63
|
-
)}
|
|
64
|
-
|
|
65
|
-
<Pressable
|
|
66
|
-
accessibilityRole="button"
|
|
67
|
-
disabled={isLoading}
|
|
68
|
-
onPress={handleSignIn}
|
|
69
|
-
style={styles.button}
|
|
70
|
-
>
|
|
71
|
-
{isLoading ? (
|
|
72
|
-
<ActivityIndicator color="white" />
|
|
73
|
-
) : (
|
|
74
|
-
<Text style={styles.buttonText}>Sign In</Text>
|
|
75
|
-
)}
|
|
76
|
-
</Pressable>
|
|
77
|
-
</View>
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Fake authentication function according to our abilities.
|
|
83
|
-
* @param username The username to authenticate.
|
|
84
|
-
* @param password The password to authenticate.
|
|
85
|
-
* @returns username if the username and password are correct, null otherwise.
|
|
86
|
-
*/
|
|
87
|
-
async function authUser(
|
|
88
|
-
username: string,
|
|
89
|
-
password: string
|
|
90
|
-
): Promise<string | null> {
|
|
91
|
-
return new Promise((resolve) =>
|
|
92
|
-
setTimeout(() => {
|
|
93
|
-
const hasValidCredentials = username === 'admin' && password === 'admin1';
|
|
94
|
-
resolve(hasValidCredentials ? username : null);
|
|
95
|
-
}, 250)
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const styles = StyleSheet.create({
|
|
100
|
-
container: {
|
|
101
|
-
padding: 20,
|
|
102
|
-
},
|
|
103
|
-
title: {
|
|
104
|
-
alignSelf: 'center',
|
|
105
|
-
fontSize: 24,
|
|
106
|
-
marginTop: 8,
|
|
107
|
-
marginBottom: 40,
|
|
108
|
-
},
|
|
109
|
-
textLabel: {
|
|
110
|
-
fontSize: 16,
|
|
111
|
-
color: '#444',
|
|
112
|
-
},
|
|
113
|
-
textInput: {
|
|
114
|
-
fontSize: 20,
|
|
115
|
-
padding: 8,
|
|
116
|
-
marginVertical: 8,
|
|
117
|
-
borderColor: 'black',
|
|
118
|
-
borderWidth: 1,
|
|
119
|
-
},
|
|
120
|
-
button: {
|
|
121
|
-
backgroundColor: '#3256a8',
|
|
122
|
-
padding: 16,
|
|
123
|
-
alignItems: 'center',
|
|
124
|
-
justifyContent: 'center',
|
|
125
|
-
marginTop: 20,
|
|
126
|
-
minHeight: 56,
|
|
127
|
-
},
|
|
128
|
-
buttonText: {
|
|
129
|
-
fontSize: 20,
|
|
130
|
-
fontWeight: '600',
|
|
131
|
-
color: 'white',
|
|
132
|
-
},
|
|
133
|
-
validator: {
|
|
134
|
-
color: 'red',
|
|
135
|
-
fontSize: 18,
|
|
136
|
-
marginTop: 8,
|
|
137
|
-
},
|
|
138
|
-
});
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-undef, import/no-extraneous-dependencies */
|
|
2
|
-
|
|
3
|
-
// Import Jest Native matchers
|
|
4
|
-
import '@testing-library/jest-native/extend-expect';
|
|
5
|
-
|
|
6
|
-
// Silence the warning: Animated: `useNativeDriver` is not supported because the native animated module is missing
|
|
7
|
-
jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"main": "node_modules/expo/AppEntry.js",
|
|
3
|
-
"scripts": {
|
|
4
|
-
"start": "expo start",
|
|
5
|
-
"android": "expo start --android",
|
|
6
|
-
"ios": "expo start --ios",
|
|
7
|
-
"web": "expo start --web",
|
|
8
|
-
"eject": "expo eject",
|
|
9
|
-
"test": "jest",
|
|
10
|
-
"typecheck": "tsc --noEmit"
|
|
11
|
-
},
|
|
12
|
-
"dependencies": {
|
|
13
|
-
"expo": "^49.0.0",
|
|
14
|
-
"expo-status-bar": "~1.6.0",
|
|
15
|
-
"react": "18.2.0",
|
|
16
|
-
"react-dom": "18.2.0",
|
|
17
|
-
"react-native": "0.72.3",
|
|
18
|
-
"react-native-web": "~0.19.6"
|
|
19
|
-
},
|
|
20
|
-
"devDependencies": {
|
|
21
|
-
"@babel/core": "^7.20.0",
|
|
22
|
-
"@testing-library/jest-native": "^5.4.2",
|
|
23
|
-
"@testing-library/react-native": "^12.2.0",
|
|
24
|
-
"@types/react": "~18.2.14",
|
|
25
|
-
"jest": "^29.3.0",
|
|
26
|
-
"react-test-renderer": "18.2.0",
|
|
27
|
-
"typescript": "^5.1.3"
|
|
28
|
-
},
|
|
29
|
-
"private": true
|
|
30
|
-
}
|