-
Notifications
You must be signed in to change notification settings - Fork 10.3k
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
[Gatsby v2] Jest unit testing and configuration for Gatsby #5824
Comments
Thanks for the detailed write up! Cannot find module './pages.json' from 'gatsby-browser-entry.js'This seems like a bug that should be fixed. In v2 the Link component is exported from Gatsby itself. This is done in A 'quick fix' for this would be to always have an empty .babelrcAdding a note about this in the v2 migration guide would be very useful I think. I'd be be very happy to see a PR if you're interested? Maybe it could also link to the custom babelrc docs? I'm glad to hear everything else went smoothly :) |
That or maybe something like: let pages
if (process.env.NODE_ENV === `test`) {
pages = []
} else {
import pagesJson from "./pages.json"
pages = pagesJson
} instead of straight importing |
Thanks for the review @pieh and @m-allanson ! Will be happy to look into taking both of these tasks on (docs and pages.json)! |
@pieh |
Hah, of course, my bad yeah |
unless we relax the eslint rule... |
Let's do what @m-allanson suggested. |
I dropped in a pages.json file and copied the contents out of my own projects pages.json and a lot of scary things happened. 😞 here's what captured in my terminal console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Uncaught [TypeError: Cannot read property 'history' of undefined]
at reportException (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
at invokeEventListeners (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:209:9)
at HTMLUnknownElementImpl._dispatch (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:138:16)
at invokeGuardedCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:187:29)
at replayUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15194:5)
at renderRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15840:11) TypeError: Cannot read property 'history' of undefined
at new GatsbyLink (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at HTMLUnknownElement.callCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:100:14)
at invokeEventListeners (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27)
at HTMLUnknownElementImpl._dispatch (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:138:16)
at invokeGuardedCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:187:29)
at replayUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15194:5)
at renderRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15840:11)
at performWorkOnRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at /Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/test/integration/pages/about.spec.jsx:27:31)
at Object.asyncFn (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/jasmine_async.js:51:37)
at resolve (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:52:12)
at new Promise (<anonymous>)
at mapper (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:39:19)
at promise.then (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:73:82)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Uncaught [TypeError: Cannot read property 'history' of undefined]
at reportException (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
at invokeEventListeners (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:209:9)
at HTMLUnknownElementImpl._dispatch (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:138:16)
at invokeGuardedCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:187:29)
at replayUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15194:5)
at renderRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15840:11) TypeError: Cannot read property 'history' of undefined
at new GatsbyLink (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at HTMLUnknownElement.callCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:100:14)
at invokeEventListeners (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27)
at HTMLUnknownElementImpl._dispatch (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:138:16)
at invokeGuardedCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:187:29)
at replayUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15194:5)
at renderRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15840:11)
at performWorkOnRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at /Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/test/integration/pages/about.spec.jsx:27:31)
at Object.asyncFn (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/jasmine_async.js:51:37)
at resolve (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:52:12)
at new Promise (<anonymous>)
at mapper (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:39:19)
at promise.then (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:73:82)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Uncaught [TypeError: Cannot read property 'history' of undefined]
at reportException (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
at invokeEventListeners (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:209:9)
at HTMLUnknownElementImpl._dispatch (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:138:16)
at invokeGuardedCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:187:29)
at replayUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15194:5)
at renderRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15840:11) TypeError: Cannot read property 'history' of undefined
at new GatsbyLink (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at HTMLUnknownElement.callCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:100:14)
at invokeEventListeners (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27)
at HTMLUnknownElementImpl._dispatch (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:138:16)
at invokeGuardedCallback (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:187:29)
at replayUnitOfWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15194:5)
at renderRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:15840:11)
at performWorkOnRoot (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at /Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/test/integration/pages/about.spec.jsx:27:31)
at Object.asyncFn (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/jasmine_async.js:51:37)
at resolve (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:52:12)
at new Promise (<anonymous>)
at mapper (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:39:19)
at promise.then (/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/node_modules/jest-jasmine2/build/queue_runner.js:73:82)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
console.error node_modules/react-dom/cjs/react-dom.development.js:14113
The above error occurred in the <GatsbyLink> component:
in GatsbyLink (created by Header)
in div (created by Header)
in Header (created by Layout)
in section (created by Layout)
in div (created by Layout)
in Layout (created by PublicationsPage)
in PublicationsPage (created by WrapperComponent)
in WrapperComponent
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://fb.me/react-error-boundaries to learn more about error boundaries.
console.error node_modules/react-dom/cjs/react-dom.development.js:14113
The above error occurred in the <GatsbyLink> component:
in GatsbyLink (created by Naviagation)
in li (created by Naviagation)
in ul (created by Naviagation)
in nav (created by Naviagation)
in div (created by Naviagation)
in Naviagation (created by Layout)
in section (created by Layout)
in div (created by Layout)
in Layout (created by PublicationsPage)
in PublicationsPage (created by WrapperComponent)
in WrapperComponent
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://fb.me/react-error-boundaries to learn more about error boundaries.
console.error node_modules/react-dom/cjs/react-dom.development.js:14113
The above error occurred in the <GatsbyLink> component:
in GatsbyLink (created by Naviagation)
in li (created by Naviagation)
in ul (created by Naviagation)
in nav (created by Naviagation)
in div (created by Naviagation)
in Naviagation (created by Layout)
in section (created by Layout)
in div (created by Layout)
in Layout (created by PublicationsPage)
in PublicationsPage (created by WrapperComponent)
in WrapperComponent
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://fb.me/react-error-boundaries to learn more about error boundaries.
console.error node_modules/react-dom/cjs/react-dom.development.js:14113
The above error occurred in the <GatsbyLink> component:
in GatsbyLink (created by Naviagation)
in li (created by Naviagation)
in ul (created by Naviagation)
in nav (created by Naviagation)
in div (created by Naviagation)
in Naviagation (created by Layout)
in section (created by Layout)
in div (created by Layout)
in Layout (created by PublicationsPage)
FAIL test/integration/pages/about.spec.jsxperComponent)
About Page
default state
✕ should be defined (165ms)
✕ should have a sub heading (99ms)
✕ should have sub nav links (64ms)
✕ should have a content section (41ms)
✕ should have the Speaking Content section be the active section by default (60ms)
✕ should NOT have any other content sections displayed by default (78ms)
✕ should have articles (52ms)
✕ should have presentations (63ms)
✕ should have social links (75ms)
Speaking Content Section
✕ should display the speaking content when the link is clicked after another click (54ms)
Writing Content Section
✕ should display speaking content when the speaking link is clicked (43ms)
✕ should have a call to action when displayed (31ms)
● About Page › default state › should be defined
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should be defined
expect(received).toBeDefined()
Expected value to be defined, instead received
undefined
16 |
17 | it('should be defined', () => {
> 18 | expect(about).toBeDefined();
19 | expect(about.find('#about').length).toBe(1);
20 | });
21 |
at Object.<anonymous> (test/integration/pages/about.spec.jsx:18:21)
● About Page › default state › should have a sub heading
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have a sub heading
TypeError: Cannot read property 'find' of undefined
21 |
22 | it('should have a sub heading', () => {
> 23 | const subHeading = about.find('.sub-heading');
24 |
25 | expect(subHeading.length).toBe(1);
26 | expect(subHeading.text()).toBeDefined();
at Object.<anonymous> (test/integration/pages/about.spec.jsx:23:32)
● About Page › default state › should have sub nav links
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have sub nav links
TypeError: Cannot read property 'find' of undefined
28 |
29 | it('should have sub nav links', () => {
> 30 | const subHeading = about.find('.content-links');
31 | const links = subHeading.find('h2');
32 |
33 | expect(subHeading.length).toBe(1);
at Object.<anonymous> (test/integration/pages/about.spec.jsx:30:32)
● About Page › default state › should have a content section
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have a content section
TypeError: Cannot read property 'find' of undefined
37 |
38 | it('should have a content section', () => {
> 39 | const subHeading = about.find('.content-output');
40 |
41 | expect(subHeading.length).toBe(1);
42 | expect(subHeading.text()).toBeDefined();
at Object.<anonymous> (test/integration/pages/about.spec.jsx:39:32)
● About Page › default state › should have the Speaking Content section be the active section by default
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have the Speaking Content section be the active section by default
TypeError: Cannot read property 'state' of undefined
44 |
45 | it('should have the Speaking Content section be the active section by default', () => {
> 46 | expect(about.state().activeSection).toBe('SPEAKING');
47 | expect(about.find('.content-speaking').length).toBe(1);
48 | });
49 |
at Object.<anonymous> (test/integration/pages/about.spec.jsx:46:20)
● About Page › default state › should NOT have any other content sections displayed by default
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should NOT have any other content sections displayed by default
TypeError: Cannot read property 'find' of undefined
49 |
50 | it('should NOT have any other content sections displayed by default', () => {
> 51 | expect(about.find('.content-writing').length).toBe(0);
52 | });
53 |
54 | it('should have articles', () => {
at Object.<anonymous> (test/integration/pages/about.spec.jsx:51:20)
● About Page › default state › should have articles
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have articles
TypeError: Cannot read property 'state' of undefined
53 |
54 | it('should have articles', () => {
> 55 | expect(about.state().articles.length).toBeGreaterThanOrEqual(1);
56 | });
57 |
58 | it('should have presentations', () => {
at Object.<anonymous> (test/integration/pages/about.spec.jsx:55:20)
● About Page › default state › should have presentations
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have presentations
TypeError: Cannot read property 'state' of undefined
57 |
58 | it('should have presentations', () => {
> 59 | expect(about.state().presentations.length).toBeGreaterThanOrEqual(1);
60 | });
61 |
62 | it('should have social links', () => {
at Object.<anonymous> (test/integration/pages/about.spec.jsx:59:20)
● About Page › default state › should have social links
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › default state › should have social links
TypeError: Cannot read property 'state' of undefined
61 |
62 | it('should have social links', () => {
> 63 | expect(about.state().socialLinksMap).toBeDefined();
64 | });
65 | });
66 |
at Object.<anonymous> (test/integration/pages/about.spec.jsx:63:20)
● About Page › Speaking Content Section › should display the speaking content when the link is clicked after another click
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › Speaking Content Section › should display the speaking content when the link is clicked after another click
TypeError: Cannot read property 'find' of undefined
67 | describe('Speaking Content Section', () => {
68 | it('should display the speaking content when the link is clicked after another click', () => {
> 69 | about.find('.link-writing').simulate('click');
70 | about.find('.link-speaking').simulate('click');
71 |
72 | expect(about.find('.content-speaking').length).toBe(1);
at Object.<anonymous> (test/integration/pages/about.spec.jsx:69:13)
● About Page › Writing Content Section › should display speaking content when the speaking link is clicked
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › Writing Content Section › should display speaking content when the speaking link is clicked
TypeError: Cannot read property 'find' of undefined
76 | describe('Writing Content Section', () => {
77 | beforeEach(() => {
> 78 | about.find('.link-writing').simulate('click');
79 | });
80 |
81 | it('should display speaking content when the speaking link is clicked', () => {
at Object.<anonymous> (test/integration/pages/about.spec.jsx:78:13)
● About Page › Writing Content Section › should display speaking content when the speaking link is clicked
TypeError: Cannot read property 'find' of undefined
80 |
81 | it('should display speaking content when the speaking link is clicked', () => {
> 82 | about.find('.link-writing').simulate('click');
83 |
84 | // test for a <CardList/> component here ideally
85 | expect(about.find('.content-writing').length).toBe(1);
at Object.<anonymous> (test/integration/pages/about.spec.jsx:82:13)
● About Page › Writing Content Section › should have a call to action when displayed
TypeError: Cannot read property 'history' of undefined
10 |
11 | beforeEach(() => {
> 12 | about = mount(<About/>);
13 | });
14 |
15 | describe('default state', () => {
at new GatsbyLink (node_modules/gatsby-link/index.js:107:34)
at constructClassInstance (node_modules/react-dom/cjs/react-dom.development.js:11333:18)
at updateClassComponent (node_modules/react-dom/cjs/react-dom.development.js:13036:7)
at beginWork (node_modules/react-dom/cjs/react-dom.development.js:13715:14)
at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:15741:12)
at workLoop (node_modules/react-dom/cjs/react-dom.development.js:15780:24)
at renderRoot (node_modules/react-dom/cjs/react-dom.development.js:15820:7)
at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:16437:22)
at performWork (node_modules/react-dom/cjs/react-dom.development.js:16358:7)
at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:16330:3)
at requestWork (node_modules/react-dom/cjs/react-dom.development.js:16230:5)
at scheduleWork$1 (node_modules/react-dom/cjs/react-dom.development.js:16096:11)
at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:16663:3)
at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:16690:10)
at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:16717:10)
at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17000:3)
at node_modules/react-dom/cjs/react-dom.development.js:17140:14
at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:16557:10)
at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:17136:5)
at Object.render (node_modules/react-dom/cjs/react-dom.development.js:17195:12)
at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:218:50)
at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:98:16)
at mount (node_modules/enzyme/build/mount.js:19:10)
at Object.<anonymous> (test/integration/pages/about.spec.jsx:12:13)
● About Page › Writing Content Section › should have a call to action when displayed
TypeError: Cannot read property 'find' of undefined
76 | describe('Writing Content Section', () => {
77 | beforeEach(() => {
> 78 | about.find('.link-writing').simulate('click');
79 | });
80 |
81 | it('should display speaking content when the speaking link is clicked', () => {
at Object.<anonymous> (test/integration/pages/about.spec.jsx:78:13)
● About Page › Writing Content Section › should have a call to action when displayed
TypeError: Cannot read property 'find' of undefined
87 |
88 | it('should have a call to action when displayed', () => {
> 89 | about.find('.link-writing').simulate('click');
90 |
91 | const cta = about.find('.cta');
92 |
at Object.<anonymous> (test/integration/pages/about.spec.jsx:89:13)
Test Suites: 3 failed, 2 skipped, 8 passed, 11 of 13 total
Tests: 18 failed, 5 skipped, 45 passed, 68 total
Snapshots: 0 total
Time: 5.198s
Ran all test suites.
error An unexpected error occurred: "Command failed.
Exit code: 1
Command: sh
Arguments: -c rimraf ./reports && jest --config ./jest.config.json --no-cache
Directory: /Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io
Output:
".
info If you think this is a bug, please open a bug report with the information provided in "/Users/owenbuckley/Workspace/thegreenhouse.io/repo/www.thegreenhouse.io/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. |
I ran into the same issue when upgrading to v2. As mentioned above, I just added an empty JSON file:
Of course, that's a quick and dirty fix, but Jest is happy now. |
Another option that may be a bit more resilient is to use Jest's moduleMapper config setting: {
"moduleNameMapper": {
"node_modules/gatsby/cache-dir/pages.json$": "<rootDir>/__mocks__/pages.json",
}
} Then have an empty pages.json file in a mocks folder at root of project |
nice! @kkemple ! Will definitely try this out |
opened a new issue for the new errors I saw after adding pages.json This can be closed if desired. |
thanks @thescientist13 for opening a new issue to track that! I would prefer to leave this open as our fix is in user land and not core, thoughts @pieh and/or @m-allanson? |
I'm experiencing a similar issue in a different file:
I tried the solution mentioned by @kkemple but that didn't work. You guys have any idea how to fix this problem? |
@jordyvanraaij This worked for me: "moduleNameMapper": {
"^./pages.json$": "<rootDir>/__mocks__/pages.json"
} |
@ascorbic doesn't work for me, I think this mapper will override other
|
@jordyvanraaij That's probably because your mock pages.json is invalid. Mine is |
@ascorbic seems to do the trick (after installing However, now I've got errors with the Gatsby Link component just like @thescientist13:
|
@jordyvanraaij I solved that by wrapping it in a |
I've gone ahead and created a PR (#6304) to add the empty |
@ascorbic where does |
It's in react-router-dom. And yes, I wrap them all with it if they use Link. |
I "think" this issue could probably be closed, but I personally couldn't verify it as upgrading to However, with the docs you've provided, I can plan this weekend to to upgrade to the latest version of Gatsby and validate this and #6240 and and report back / close. Thanks for all your help so far! |
yup, this can be closed. Thanks all! 🌟 |
Hello! Not sure I should reopen this ticket, but I keep having issues with Jest + Gatsby v2 and I can't figure out why. DescriptionI'm working on integrating simple Unit Tests, as I'd like to simply "test without crashing" a page. SyntaxError: Unexpected identifierFrom Unit Testing FAIL src/pages/__tests__/index.test.js
● Test suite failed to run
/Users/danetag/Sites/projects/google-aiy/node_modules/gatsby/cache-dir/gatsby-browser-entry.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import React from "react"
^^^^^
SyntaxError: Unexpected identifier
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
> 3 | import { StaticQuery, graphql } from 'gatsby';
| ^
4 | import Head from 'components/head';
5 | import Header from 'components/header';
6 | import Transition from 'components/transition';
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:403:17)
at Object.<anonymous> (src/components/layout/layout.js:3:1)
babel-preset-env: `DEBUG` option
Using targets:
{}
Modules transform: commonjs
Using plugins:
check-es2015-constants {}
transform-es2015-arrow-functions {}
transform-es2015-block-scoped-functions {}
transform-es2015-block-scoping {}
transform-es2015-classes {}
transform-es2015-computed-properties {}
transform-es2015-destructuring {}
transform-es2015-duplicate-keys {}
transform-es2015-for-of {}
transform-es2015-function-name {}
transform-es2015-literals {}
transform-es2015-object-super {}
transform-es2015-parameters {}
transform-es2015-shorthand-properties {}
transform-es2015-spread {}
transform-es2015-sticky-regex {}
transform-es2015-template-literals {}
transform-es2015-typeof-symbol {}
transform-es2015-unicode-regex {}
transform-regenerator {}
transform-exponentiation-operator {}
transform-async-to-generator {}
syntax-trailing-function-commas {}
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 1.729s
"scripts": {
"test": "node scripts/test.js"
},
...
"jest": {
"verbose": true,
"testMatch": [
"<rootDir>/src/**/__tests__/**/*.{js,jsx,mjs}",
"<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}"
],
"testPathIgnorePatterns": [
"/node_modules/",
"/.cache/"
],
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$",
"^.+\\.module\\.css$"
],
"transform": {
"^.+\\.(js|jsx|mjs)$": "<rootDir>/config/jest/transformer.js"
},
"moduleDirectories": [
"node_modules",
"<rootDir>/config/jest",
"<rootDir>/src"
],
"moduleNameMapper": {
"^react-native$": "react-native-web",
"^.+\\.module\\.css$": "identity-obj-proxy"
},
"testEnvironment": "node",
"testURL": "http://localhost:9999",
"setupFiles": [
"<rootDir>/config/jest/setup-tests.js"
]
}
...
'use strict';
require('babel-polyfill');
// Do this as the first thing so that any code reading it knows the right env.
process.env.BABEL_ENV = 'test';
process.env.NODE_ENV = 'test';
process.env.PUBLIC_URL = '';
// Makes the script crash on unhandled rejections instead of silently
// ignoring them. In the future, promise rejections that are not handled will
// terminate the Node.js process with a non-zero exit code.
process.on('unhandledRejection', err => {
throw err;
});
// Ensure environment variables are read.
require('../config/env');
const jest = require('jest');
const argv = process.argv.slice(2);
argv.push('--no-cache');
jest.run(argv);
module.exports = require('babel-jest').createTransformer({
presets: ["react", ["env", {debug: true}]],
"env": {
"test": {
"plugins": [
"transform-es2015-modules-commonjs",
"transform-object-rest-spread"
]
}
}
})
const Enzyme = require('enzyme');
const Adapter = require('enzyme-adapter-react-16');
Enzyme.configure({ adapter: new Adapter() });
import React from 'react';
import { shallow } from 'enzyme';
import Index from 'pages/index';
describe('Index page', () => {
it('should render without throwing an error', () => {
shallow(
<Index />
);
});
}); I'm not sure what the problem is, but it seems to come from Thanks for your help! |
@Danetag |
@thescientist13 Thank you so much, the testing guide was in fact very helpful, as well as your comment! I don't have any import issues now, I'm so close. This issue is related to graphql FAIL src/pages/__tests__/index.test.js
● Test suite failed to run
It appears like Gatsby is misconfigured. Gatsby related `graphql` calls are supposed to only be evaluated at compile time, and then compiled away,. Unfortunately, something went wrong and the query was left in the compiled code.
.Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.
15 | );
16 |
> 17 | export const query = graphql`
| ^
18 | query HomepageQuery {
19 | contentJson {
20 | title
at graphql (node_modules/gatsby/cache-dir/gatsby-browser-entry.js:33:9)
at Object.<anonymous> (src/pages/index.js:17:19)
at Object.<anonymous> (src/pages/__tests__/index.test.js:9:1)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 3.324s
import React from 'react';
import { mount } from 'enzyme';
import { MemoryRouter } from 'react-router-dom';
import Index from 'pages/index';
describe('Index page', () => {
let about;
global.___loader = { // eslint-disable-line no-underscore-dangle
enqueue: jest.fn()
};
beforeEach(() => {
about = mount(
<MemoryRouter>
<Index/>
</MemoryRouter>
).children();
});
it('default state', () => {
it('should be defined', () => {
expect(about).toBeDefined();
});
});
});
import React from 'react';
import Layout from 'components/layout/layout';
import Box from 'components/box/box';
import Title from 'components/title/title';
import Gallery from 'components/gallery/gallery';
import { graphql } from 'gatsby';
export default ({ data }) => (
<Layout>
<Box>
<Title tag="span">{data.contentJson.content}</Title>
</Box>
<Gallery items={data.contentJson.gallery} />
</Layout>
);
export const query = graphql`
query HomepageQuery {
contentJson {
title
content
gallery {
title
copy
image {
childImageSharp {
fluid(maxHeight: 500, quality: 90) {
...GatsbyImageSharpFluid_withWebp
}
}
}
}
}
}
`; Any idea? Thank you again! |
@Danetag I think you've identified a missing part from my testing guide! Jest doesn't run graphql queries, so you can't test them. In general it's a bad idea to test components that load data from elsewhere: you want to pass your own data in to test it. You have a couple of options. You may be able to use import { graphql } from "gatsby";
import * as React from "react";
import Layout from "../components/Layout";
import { ProjectPage } from "../components/ProjectPage";
import { Project, ReactRouterLocation } from "../types/data";
interface Props {
data: GraphData;
location: ReactRouterLocation;
}
interface GraphData {
projectsJson: Project;
}
export const ProjectTemplate: React.SFC<Props> = ({ data, location }) => (
<Layout location={location} title={data.projectsJson.titleLineOne}>
<ProjectPage project={data.projectsJson} />
</Layout>
);
export const ProjectQuery = graphql`
query project($id: String!) {
projectsJson(id: { eq: $id }) {
...Project
}
}
`;
export default ProjectTemplate; I then don't test that component, but test /// <reference types="@types/jest" />
import * as React from "react";
import * as renderer from "react-test-renderer";
import { MemoryRouter } from "react-router";
import { project } from "../../types/fixtures";
import { ProjectPage } from "./index";
describe("ProjectPage", () =>
it("renders correctly", () => {
const tree = renderer
.create(
<MemoryRouter>
<ProjectPage project={project} />
</MemoryRouter>
)
.toJSON();
expect(tree).toMatchSnapshot();
})); I think it might be worth me either adding to the test guide, or doing another page for it on testing graphql. |
Thank so much for your answer @ascorbic ! The goal here was to be able to test that all the pages basically runs with the current set of data, before deploying. I totally agree on the fact that it makes sense to test the modules specifically as well. Any way that would come in mind to be able to run those graphql queries independently before, and then inject the data to each page? Thank you again! |
Thank you 🙏 I'm currently trying to get the data by spinning the graphql server before the test (if you know a better way than Thank you again for your hard work! |
@ascorbic I figured out a way to only run the graphql server before the tests, but adding the FAIL src/pages/__tests__/index.test.js
● Test suite failed to run
Unexpected return value from visitor method function (path) {
return fn.call(state, path, state);
}
at NodePath._call (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:60:13)
at NodePath.call (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:40:17)
at NodePath.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:88:12)
at TraversalContext.visitQueue (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
at TraversalContext.visitSingle (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:90:19)
at TraversalContext.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:146:19)
at Function.traverse.node (node_modules/@babel/core/node_modules/@babel/traverse/lib/index.js:94:17)
at NodePath.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:95:18)
at TraversalContext.visitQueue (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
at TraversalContext.visitMultiple (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:85:17)
at TraversalContext.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:144:19)
at Function.traverse.node (node_modules/@babel/core/node_modules/@babel/traverse/lib/index.js:94:17)
at NodePath.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/path/context.js:95:18)
at TraversalContext.visitQueue (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:118:16)
at TraversalContext.visitSingle (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:90:19)
at TraversalContext.visit (node_modules/@babel/core/node_modules/@babel/traverse/lib/context.js:146:19)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 2.609s
module.exports = require('babel-jest').createTransformer({
presets: ["@babel/react", "@babel/env"],
plugins: [
"@babel/plugin-proposal-optional-chaining",
"@babel/plugin-proposal-class-properties",
"remove-graphql-queries",
],
}) Any thoughts? SO CLOSE 🏆 |
Also in the same situation as @Danetag |
@mrdbeck Actually using Thanks team 👊 PS: I did find a way to run the graphql server locally to be able to request it during the test... |
@Danetag amazing news, this fixed it for me too. Cheers |
Adding
|
I fixed my issue using this.
|
Description
I was working my way through the upgrade process to v2 for my website and wanted to report a couple things while running my unit tests with Jest and Gatsby v2 (coming from v1).
Cannot find module './pages.json' from 'gatsby-browser-entry.js'
I am seeing this in some specs when running unit tests
Note sure if it is related to this issue?
.babelrc
Not so much an issue with Gatsby per se, but maybe worth an update somewhere in the docs, which I am happy to do as it is a change in expected behavior. (relative to v1)
I had a .babelrc file in the root of my project which was read by Jest to process JSX and ES2015+ syntax.
After the upgrade, Gatsby which now depends on Babel 7, will now reflect Babel's configuration resolution behavior, which will now defer to the consuming project's top level .babelrc instead, which generated this error
Solution was to delete my .babelrc file and "move" the configuration over to Jest, per the recommendation here to avoid the conflict.
Steps to reproduce
Expected result
Actual result
Environment
File contents (if changed)
gatsby-config.js
package.json
: N/Agatsby-node.js
: N/Agatsby-browser.js
: N/Agatsby-ssr.js
: N/AThanks for everything and let me know if you need more info! The upgrade was straightforward for me and everything else is working as expected. 👍
Update
Original issue addressed here 🎉
The text was updated successfully, but these errors were encountered: