useRouter.spec.tsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {createMemoryHistory, Route, Router, RouterContext} from 'react-router';
  2. import {render} from 'sentry-test/reactTestingLibrary';
  3. import useRouter from 'sentry/utils/useRouter';
  4. import {RouteContext} from 'sentry/views/routeContext';
  5. describe('useRouter', () => {
  6. it('returns the current router object', function () {
  7. let expectedRouter;
  8. let actualRouter;
  9. function HomePage() {
  10. actualRouter = useRouter();
  11. return null;
  12. }
  13. const memoryHistory = createMemoryHistory();
  14. memoryHistory.push('/');
  15. render(
  16. <Router
  17. history={memoryHistory}
  18. render={props => {
  19. expectedRouter = props.router;
  20. return (
  21. <RouteContext.Provider value={props}>
  22. <RouterContext {...props} />
  23. </RouteContext.Provider>
  24. );
  25. }}
  26. >
  27. <Route path="/" component={HomePage} />
  28. </Router>
  29. );
  30. expect(actualRouter).toEqual(expectedRouter);
  31. });
  32. it('throws error when called outside of routes provider', function () {
  33. // Error is expected, do not fail when calling console.error
  34. jest.spyOn(console, 'error').mockImplementation();
  35. const memoryHistory = createMemoryHistory();
  36. memoryHistory.push('/');
  37. expect(() =>
  38. render(
  39. <RouteContext.Provider value={null}>
  40. <Router history={memoryHistory}>
  41. <Route
  42. path="/"
  43. component={() => {
  44. useRouter();
  45. return null;
  46. }}
  47. />
  48. </Router>
  49. </RouteContext.Provider>
  50. )
  51. ).toThrow(/useRouteContext called outside of routes provider/);
  52. });
  53. });