Open gersomvg opened 2 years ago
Having the same issue.
will work on a fix by this week
@gorhom Amazing! Let me know if there is anything I can help you with, for example testing fixes or adding more docs regarding jest/testing.
I can also try out any possible fixes on our bigger project, to see if it also solves the issues there, since we use a few more bottom-sheet hooks and components in that project.
hi @gersomvg , could you test this branch and let me know if its working ?
yarn add ssh://github.com/gorhom/react-native-bottom-sheet#refactor/added-jest-mock
Thanks for this @gorhom! I guess this is a good and simple approach to just mock out the lib completely for external consumers, assuming the lib tests its internals itself.
Few issues I ran into:
BottomSheetView
seems to be missingyarn add
doesn't generate all needed build files? I couldn't figure out how to build your branch, so I just copied the mock.js
and package.json
changes manually to my node_modules. This worked, except for that my typescript code didn't recognise the mock.js
as a commonjs (?) module, so after mocking, the BottomSheet
in import BottomSheet from '@gorhom/react-native-bottom-sheet'
contained everything from module.exports
in mock.js
.After accounting for these two points, my tests ran fine! 🎊
@gorhom seems like the issue with toString
is fixed, but was getting the following error because of how the default
is imported and used in our codebase.
Fixed it by adding __esModule
to the jest mock so it handles the default
correctly
jest.mock('@gorhom/bottom-sheet', () => ({
...mockBottomSheet,
__esModule: true,
}));
@gorhom Thanks for the release! I was on holiday, hence the late response. With @PedroRestrepo's fix it works for me.
Here's what I did, works for me:
jest.mock('@gorhom/bottom-sheet', () => ({
__esModule: true,
...require('@gorhom/bottom-sheet/mock')
}))
use this:
import mockBottomSheet from '@gorhom/bottom-sheet/mock';
jest.mock('@gorhom/bottom-sheet', () => mockBottomSheet);
Here's what I did, works for me:
jest.mock('@gorhom/bottom-sheet', () => ({ __esModule: true, ...require('@gorhom/bottom-sheet/mock') }))
I have a screen with three BottomSheet
components. When I run a test case, all of them are opened on debug tree and overlap a button that must be pressed. Do you have any tips regarding this mock, thus none of the components stay opened?
@Alaa-Ben
@anabeatrizzz were you able to resolve your issue? I'm seeing something similar in tests where the BottomSheetModal is open by default and tests are failing.
What I did was return null
based on a false
condition, otherwise, return the BottomSheet
Example:
const BottomSheetAnswer = ({ loading }: { loading: boolean }) => {
return (
<>
{loading ? (
<BottomSheet>
<View />
</BottomSheet>
) : null}
</>
);
};
@anniekao
Bug
I have a bigger project that uses this library quite heavily, but when including it in our jest testing suite I run into all kinds of errors.
I've made a minimal reproduction here: https://github.com/gersomvg/bug-bottom-sheet-jest
The error that I run into there isn't exactly the same as the one I have in the bigger project, but I suspect they are related.
It looks like
@gorhom/bottom-sheet
doesn't play nicely with gesture-handler and reanimated mocks.Environment info
Steps To Reproduce
Describe what you expected to happen:
Reproducible sample code
https://github.com/gersomvg/bug-bottom-sheet-jest