diff --git a/packages/react-router/empty-module.js b/packages/react-router/empty-module.js new file mode 100644 index 0000000000..f06d152fff --- /dev/null +++ b/packages/react-router/empty-module.js @@ -0,0 +1 @@ +module.exports = '' \ No newline at end of file diff --git a/packages/react-router/jest.setup.js b/packages/react-router/jest.setup.js deleted file mode 100644 index bda1cbdb37..0000000000 --- a/packages/react-router/jest.setup.js +++ /dev/null @@ -1,7 +0,0 @@ -window.matchMedia = window.matchMedia || function() { - return { - matches : false, - addListener : function() {}, - removeListener: function() {} - }; -}; diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 6c9aca5fea..c23105b95a 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -49,20 +49,22 @@ "devDependencies": { "@ionic/core": "5.0.0-beta.2", "@ionic/react": "5.0.0-beta.2", - "@types/jest": "^23.3.9", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2", + "@types/jest": "^24.0.23", "@types/node": "^12.12.14", "@types/react": "^16.9.2", "@types/react-dom": "^16.9.0", "@types/react-router": "^5.0.3", "@types/react-router-dom": "^4.3.1", - "jest": "^24.8.0", - "jest-dom": "^3.4.0", + "jest": "^24.9.0", + "jest-dom": "^4.0.0", "np": "^5.0.1", "react": "^16.9.0", "react-dom": "^16.9.0", "react-router": "^5.0.1", "react-router-dom": "^5.0.1", - "react-testing-library": "^7.0.0", "rollup": "^1.18.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-sourcemaps": "^0.4.2", @@ -75,15 +77,23 @@ "jest": { "preset": "ts-jest", "setupFilesAfterEnv": [ - "/jest.setup.js" + "/setupTests.ts" ], "testPathIgnorePatterns": [ "node_modules", "dist-transpiled", "dist" ], + "globals": { + "ts-jest": { + "diagnostics": false + } + }, "modulePaths": [ "" - ] + ], + "moduleNameMapper": { + "\\.(css|jpg|png|svg)$": "/empty-module.js" + } } } diff --git a/packages/react-router/setupTests.ts b/packages/react-router/setupTests.ts new file mode 100644 index 0000000000..e799271140 --- /dev/null +++ b/packages/react-router/setupTests.ts @@ -0,0 +1,9 @@ +import '@testing-library/jest-dom/extend-expect'; + +window.matchMedia = window.matchMedia || function() { + return { + matches: false, + addListener() { }, + removeListener() { } + }; +} as any; diff --git a/packages/react-router/src/ReactRouter/Router.tsx b/packages/react-router/src/ReactRouter/Router.tsx index 78ce6ab44b..164165a389 100644 --- a/packages/react-router/src/ReactRouter/Router.tsx +++ b/packages/react-router/src/ReactRouter/Router.tsx @@ -396,6 +396,8 @@ class RouteManager extends React.Component { + + + describe('on first page render', () => { + + let IonTestApp: React.ComponentType; + + beforeEach(() => { + IonTestApp = ({ Page }) => { + return ( + + + + + + + + ); + }; + }); + + it('should be visible', () => { + + const MyPage = () => { + return ( + +
hello
+
+ ); + }; + + const { container } = render(); + const page = container.getElementsByClassName('ion-page')[0]; + expect(page).not.toHaveClass('ion-page-invisible'); + expect(page).toHaveStyle('z-index: 101') + + }); + + it('should fire initial lifecycle events', () => { + const ionViewWillEnterListener = jest.fn(); + const ionViewDidEnterListener = jest.fn(); + + const MyPage = () => { + const ref = useRef(); + + useEffect(() => { + ref.current.addEventListener('ionViewWillEnter', ionViewWillEnterListener); + ref.current.addEventListener('ionViewDidEnter', ionViewDidEnterListener); + }, []); + + return ( + +
hello
+
+ ); + }; + + + render(); + expect(ionViewWillEnterListener).toHaveBeenCalledTimes(1); + expect(ionViewDidEnterListener).toHaveBeenCalledTimes(1); + + }); + + }); + + +});; \ No newline at end of file