enzyme-to-json icon indicating copy to clipboard operation
enzyme-to-json copied to clipboard

TypeError: Function.prototype.name sham getter called on non-function

Open Ridermansb opened this issue 5 years ago • 5 comments

When run with --coverage i get this error..

TypeError: Function.prototype.name sham getter called on non-function

● <ErrorBoundary> component › should render with message if error occour

TypeError: Function.prototype.name sham getter called on non-function

  20 | 		);
  21 |
> 22 | 		expect(wrapper).toMatchSnapshot();
     | 		                ^
  23 | 	});
  24 |
  25 | 	it("should render if error occour", function() {

  at Function.getName (../node_modules/function.prototype.name/implementation.js:31:9)
  at displayNameOfNode (../node_modules/enzyme-adapter-utils/build/Utils.js:156:95)
  at ReactSixteenAdapter.displayNameOfNode (../node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:605:62)
  at typeName (../node_modules/enzyme/build/Debug.js:60:43)
  at internalNodeToJson (../node_modules/enzyme-to-json/mount.js:70:31)
  at mountToJson (../node_modules/enzyme-to-json/mount.js:93:12)
  at Object.<anonymous>.exports.default (../node_modules/enzyme-to-json/index.js:14:32)
  at Object.print (../node_modules/enzyme-to-json/createSerializer.js:22:40)
  at printPlugin (../node_modules/pretty-format/build/index.js:287:16)
  at prettyFormat (../node_modules/pretty-format/build/index.js:485:16)
  at Object.throwingMatcher (../node_modules/expect/build/index.js:320:33)
  at Object.toMatchSnapshot (src/components/molecules/ErrorBoundary/ErrorBoundary.test.jsx:22:19)

`

If I not run with coverage, everything works fine

Question posted on Stackoverflow

Ridermansb avatar Oct 03 '18 13:10 Ridermansb

@Ridermansb might want to mention that you also reported this bug to enzyme proper https://github.com/airbnb/enzyme/issues/1889

MaxwellBo avatar Aug 12 '19 04:08 MaxwellBo

Not sure if this got resolved - as I can't see the rest of your test it's hard to tell if you have the same issue as me.

I managed to resolve the issue by changing my .find('a#someid') to actually reference the type - so .findWhere(field => field.type() === FieldText && field.prop('id') === 'displayName')

This may help someone with a similar issue!

jamesbarry93 avatar Aug 13 '19 01:08 jamesbarry93

I'm running into a related problem. I'm not getting the "sham getter" issue, but I am getting different snapshot results when I use --coverage vs. not use it. I just upgrades to styled-components 5 and that started the problem.

AaronV avatar Dec 08 '21 20:12 AaronV

That seems like an issue with whatever --coverage is, since coverage tools often need to transform code in order to record coverage - it seems entirely unrelated to this issue.

ljharb avatar Dec 08 '21 21:12 ljharb

That seems like an issue with whatever --coverage is, since coverage tools often need to transform code in order to record coverage - it seems entirely unrelated to this issue.

Thank you @ljharb, that comment helped! It seems that displayName stability was never guaranteed (for snapshots) and we've been lucky thus far. https://github.com/styled-components/babel-plugin-styled-components/issues/151

AaronV avatar Dec 08 '21 21:12 AaronV