Skip to content
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

Easier to read test failures from React warnings #22746

Closed
Zylphrex opened this issue Dec 16, 2020 · 1 comment
Closed

Easier to read test failures from React warnings #22746

Zylphrex opened this issue Dec 16, 2020 · 1 comment
Labels
Component: Developer Environment This covers issues related to setting up a developer's environment

Comments

@Zylphrex
Copy link
Member

Summary

The front end tests are using jasmine's global fail() to explicitly fail a test when certain React warnings are raised. fail() was not part of jest's documented API (see jestjs/jest#2129 (comment)) and it no longer works. This leads to a long and difficult to read error.

One example is when using the prop-types library and a required prop is not defined. This results in a warning being printed to the output via console.error which needs to be addressed and not the secondary Error: Uncaught [ReferenceError: fail is not defined].

Example Output

console.error
  Warning: Failed prop type: The prop `environments` is marked as required in `ReleaseSeries`, but its value is `undefined`.
      in ReleaseSeries (created by withApi(ReleaseSeries))
      in withApi(ReleaseSeries) (created by WithOrganizationMockWrapper)
      in WithOrganizationMockWrapper (created by withRouter(WithOrganizationMockWrapper))
      in withRouter(WithOrganizationMockWrapper) (created by WrapperComponent)
      in WrapperComponent

  32 |     !isIgnored
  33 |   ) {
> 34 |     originalConsoleError(message, ...args);
     |                         ^
  35 |     const err = new Error('Warnings received from console.error()');
  36 |     const lines = err.stack?.split('\n');
  37 |     const startIndex = lines?.findIndex(line => line.includes('tests/js/spec'));

  at BufferedConsole.<anonymous> (tests/js/throw-on-react-error.js:34:25)
  at printWarning (node_modules/prop-types/checkPropTypes.js:20:15)
  at checkPropTypes (node_modules/prop-types/checkPropTypes.js:82:11)
  at validatePropTypes (node_modules/react/cjs/react.development.js:1714:7)
  at createElementWithValidation (node_modules/react/cjs/react.development.js:1813:5)

console.error
  Error: Uncaught [ReferenceError: fail is not defined]
      at reportException (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
      at invokeEventListeners (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:209:9)
      at HTMLUnknownElementImpl._dispatch (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
      at HTMLUnknownElementImpl.dispatchEvent (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
      at HTMLUnknownElementImpl.dispatchEvent (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
      at HTMLUnknownElement.dispatchEvent (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
      at Object.invokeGuardedCallbackDev (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:237:16)
      at invokeGuardedCallback (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:292:31)
      at beginWork$1 (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:23203:7)
      at performUnitOfWork (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:22157:12) ReferenceError: fail is not defined
      at BufferedConsole.<anonymous> (/Users/tonyxiao/Documents/repos/sentry/tests/js/throw-on-react-error.js:42:5)
      at /Users/tonyxiao/Documents/repos/sentry/node_modules/jest-environment-jsdom/node_modules/jest-mock/build/index.js:480:41
      at BufferedConsole.<anonymous> (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-environment-jsdom/node_modules/jest-mock/build/index.js:489:13)
      at BufferedConsole.mockConstructor [as error] (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-environment-jsdom/node_modules/jest-mock/build/index.js:182:19)
      at printWarning (/Users/tonyxiao/Documents/repos/sentry/node_modules/prop-types/checkPropTypes.js:20:15)
      at checkPropTypes (/Users/tonyxiao/Documents/repos/sentry/node_modules/prop-types/checkPropTypes.js:82:11)
      at validatePropTypes (/Users/tonyxiao/Documents/repos/sentry/node_modules/react/cjs/react.development.js:1714:7)
      at createElementWithValidation (/Users/tonyxiao/Documents/repos/sentry/node_modules/react/cjs/react.development.js:1813:5)
      at jsx (/Users/tonyxiao/Documents/repos/sentry/node_modules/@emotion/core/dist/core.cjs.dev.js:173:32)
      at _class.render (/Users/tonyxiao/Documents/repos/sentry/src/sentry/static/sentry/app/utils/withApi.tsx:50:14)
      at finishClassComponent (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:17160:31)
      at updateClassComponent (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:17110:24)
      at beginWork (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:18620:16)
      at HTMLUnknownElement.callCallback (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:188:14)
      at invokeEventListeners (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27)
      at HTMLUnknownElementImpl._dispatch (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
      at HTMLUnknownElementImpl.dispatchEvent (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
      at HTMLUnknownElementImpl.dispatchEvent (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
      at HTMLUnknownElement.dispatchEvent (/Users/tonyxiao/Documents/repos/sentry/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
      at Object.invokeGuardedCallbackDev (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:237:16)
      at invokeGuardedCallback (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:292:31)
      at beginWork$1 (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:23203:7)
      at performUnitOfWork (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:22157:12)
      at workLoopSync (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:22130:22)
      at performSyncWorkOnRoot (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:21756:9)
      at scheduleUpdateOnFiber (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:21188:7)
      at updateContainer (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:24373:3)
      at /Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:24758:7
      at unbatchedUpdates (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:21903:12)
      at legacyRenderSubtreeIntoContainer (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:24757:5)
      at Object.render (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:24840:10)
      at fn (/Users/tonyxiao/Documents/repos/sentry/node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:430:26)
      at /Users/tonyxiao/Documents/repos/sentry/node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:347:37
      at batchedUpdates$1 (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom.development.js:21856:12)
      at Object.act (/Users/tonyxiao/Documents/repos/sentry/node_modules/react-dom/cjs/react-dom-test-utils.development.js:929:14)
      at wrapAct (/Users/tonyxiao/Documents/repos/sentry/node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:347:13)
      at Object.render (/Users/tonyxiao/Documents/repos/sentry/node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:416:16)
      at new ReactWrapper (/Users/tonyxiao/Documents/repos/sentry/node_modules/enzyme/src/ReactWrapper.js:115:16)
      at mount (/Users/tonyxiao/Documents/repos/sentry/node_modules/enzyme/src/mount.js:10:10)
      at _callee$ (/Users/tonyxiao/Documents/repos/sentry/tests/js/spec/components/charts/releaseSeries.spec.jsx:29:21)
      at tryCatch (/Users/tonyxiao/Documents/repos/sentry/node_modules/regenerator-runtime/runtime.js:45:40)
      at Generator.invoke [as _invoke] (/Users/tonyxiao/Documents/repos/sentry/node_modules/regenerator-runtime/runtime.js:274:22)
      at Generator.prototype.<computed> [as next] (/Users/tonyxiao/Documents/repos/sentry/node_modules/regenerator-runtime/runtime.js:97:21)
      at asyncGeneratorStep (/Users/tonyxiao/Documents/repos/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)
      at _next (/Users/tonyxiao/Documents/repos/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9)
      at /Users/tonyxiao/Documents/repos/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator.js:32:7
      at new Promise (<anonymous>)
      at Object.<anonymous> (/Users/tonyxiao/Documents/repos/sentry/node_modules/@babel/runtime/helpers/asyncToGenerator.js:21:12)
      at Promise.then.completed (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/utils.js:276:28)
      at new Promise (<anonymous>)
      at callAsyncCircusFn (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/utils.js:216:10)
      at _callCircusTest (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/run.js:212:40)
      at processTicksAndRejections (internal/process/task_queues.js:97:5)
      at _runTest (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/run.js:149:3)
      at _runTestsForDescribeBlock (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/run.js:63:9)
      at _runTestsForDescribeBlock (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/run.js:57:9)
      at run (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/run.js:25:3)
      at runAndTransformResultsToJestFormat (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:176:21)
      at jestAdapter (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:109:19)
      at runTestInternal (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-runner/build/runTest.js:380:16)
      at runTest (/Users/tonyxiao/Documents/repos/sentry/node_modules/jest-runner/build/runTest.js:472:34)

  32 |     !isIgnored
  33 |   ) {
> 34 |     originalConsoleError(message, ...args);
     |                         ^
  35 |     const err = new Error('Warnings received from console.error()');
  36 |     const lines = err.stack?.split('\n');
  37 |     const startIndex = lines?.findIndex(line => line.includes('tests/js/spec'));

  at BufferedConsole.<anonymous> (tests/js/throw-on-react-error.js:34:25)
  at VirtualConsole.<anonymous> (node_modules/jsdom/lib/jsdom/virtual-console.js:29:45)
  at reportException (node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:70:28)
@Zylphrex Zylphrex added the Component: Developer Environment This covers issues related to setting up a developer's environment label Dec 16, 2020
@github-actions
Copy link
Contributor

github-actions bot commented Jan 7, 2021

This issue has gone three weeks without activity. In another week, I will close it.

But! If you comment or otherwise update it, I will reset the clock, and if you label it Status: Accepted, I will leave it alone ... forever!


"A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀

@github-actions github-actions bot locked and limited conversation to collaborators Jan 29, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Component: Developer Environment This covers issues related to setting up a developer's environment
Projects
None yet
Development

No branches or pull requests

1 participant