Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 280
feat: event debugging (WIP)#1726
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base:main
Are you sure you want to change the base?
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| import * as React from 'react'; | ||
| import { Pressable, Text, View } from 'react-native'; | ||
| import { configure, fireEvent, render, screen } from '..'; | ||
| import { _console } from '../helpers/logger'; | ||
| beforeEach(() => { | ||
| jest.spyOn(_console, 'debug').mockImplementation(() => {}); | ||
| jest.spyOn(_console, 'info').mockImplementation(() => {}); | ||
| jest.spyOn(_console, 'warn').mockImplementation(() => {}); | ||
| jest.spyOn(_console, 'error').mockImplementation(() => {}); | ||
| }); | ||
| test('should log warning when firing event on element without handler', () => { | ||
| render( | ||
| <View> | ||
| <Text>No handler</Text> | ||
| </View>, | ||
| ); | ||
| fireEvent.press(screen.getByText('No handler')); | ||
| expect(_console.warn).toHaveBeenCalledTimes(1); | ||
| expect(jest.mocked(_console.warn).mock.calls[0][0]).toMatchInlineSnapshot(` | ||
| " ▲ Fire Event: no event handler for "press" event found on <Text>No handler</Text> or any of its ancestors. | ||
| " | ||
| `); | ||
| }); | ||
| test('should log warning when firing event on single disabled element', () => { | ||
| render( | ||
| <View> | ||
| <Pressable onPress={() => {}} disabled> | ||
| <Text>Disabled button</Text> | ||
| </Pressable> | ||
| </View>, | ||
| ); | ||
| fireEvent.press(screen.getByText('Disabled button')); | ||
| expect(_console.warn).toHaveBeenCalledTimes(1); | ||
| expect(jest.mocked(_console.warn).mock.calls[0][0]).toMatchInlineSnapshot(` | ||
| " ▲ Fire Event: no enabled event handler for "press" event found. Found disabled event handler(s) on: | ||
| - <Pressable disabled={true} /> (composite element) | ||
| " | ||
| `); | ||
| }); | ||
| test('should log warning about multiple disabled handlers', () => { | ||
| render( | ||
| <View> | ||
| <Pressable testID="outer" onPress={() => {}} disabled> | ||
| <Pressable testID="inner" onPress={() => {}} disabled> | ||
| <Text>Nested disabled</Text> | ||
| </Pressable> | ||
| </Pressable> | ||
| </View>, | ||
| ); | ||
| fireEvent.press(screen.getByText('Nested disabled')); | ||
| expect(_console.warn).toHaveBeenCalledTimes(1); | ||
| expect(jest.mocked(_console.warn).mock.calls[0][0]).toMatchInlineSnapshot(` | ||
| " ▲ Fire Event: no enabled event handler for "press" event found. Found disabled event handler(s) on: | ||
| - <Pressable disabled={true} testID="inner" /> (composite element) | ||
| - <Pressable disabled={true} testID="outer" /> (composite element) | ||
| " | ||
| `); | ||
| }); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -19,6 +19,11 @@ export type Config = { | ||
| * Otherwise `render` will default to concurrent rendering. | ||
| */ | ||
| concurrentRoot: boolean; | ||
| /** | ||
| * Verbose logging for the library. | ||
| */ | ||
| debug: boolean; | ||
| }; | ||
| export type ConfigAliasOptions = { | ||
| @@ -30,6 +35,7 @@ const defaultConfig: Config = { | ||
| asyncUtilTimeout: 1000, | ||
| defaultIncludeHiddenElements: false, | ||
| concurrentRoot: true, | ||
| debug: false, | ||
Collaborator There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. imo true is a good default because otherwise i fear not many people will hear about it and remember to turn it on | ||
| }; | ||
| let config = { ...defaultConfig }; | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i would add what it helps log : user event and fire event issues (for now)