adriantoine / enzyme-to-json

Snapshot test your Enzyme wrappers
MIT License
947 stars 64 forks source link

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

Open Ridermansb opened 6 years ago

Ridermansb commented 6 years ago

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

MaxwellBo commented 5 years ago

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

jamesbarry93 commented 5 years ago

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!

AaronV commented 2 years ago

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.

ljharb commented 2 years ago

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.

AaronV commented 2 years ago

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