mzgoddard / preact-render-spy

Render preact components with access to the produced virtual dom for testing.
https://www.npmjs.com/package/preact-render-spy
ISC License
178 stars 24 forks source link

defaultProps not working correctly with functional components #83

Open miteshathia opened 6 years ago

miteshathia commented 6 years ago

When using functional components, defaultProps do not get applied. When switching to a class component, there are no problems. I've provided a minimal example below w/ the output of running the test suite.

const propTypes = {
  price: PropTypes.number
};

const defaultProps = {
  price: 0
};

function Price(props) {
  const { price } = props;
  return (
    <div className="price">
      ${price.toLocaleString()}
    </div>
  );
}

Price.propTypes = propTypes;
Price.defaultProps = defaultProps;

export { Price };
import { shallow } from 'preact-render-spy';
import { Price } from '../components/Price';

describe('<Price>', () => {
  test('it renders default price', () => {
    const snapshot = shallow(<Price />);
    expect(snapshot.find('.price').text()).toBe('$0');
  });
});
  TypeError: Cannot read property 'toLocaleString' of undefined

      at Price (src/components/Price.jsx:51:14)
      at new <anonymous> (node_modules/preact-render-spy/src/preact-render-spy.js:67:30)
      at x [as render] (node_modules/preact/dist/preact.min.js:1:5403)
      at k (node_modules/preact/dist/preact.min.js:1:6208)
      at k (node_modules/preact/dist/preact.min.js:1:6455)
      at i (node_modules/preact/dist/preact.min.js:1:965)
      at RenderContext.ContextRootWrapper.vdom (node_modules/preact-render-spy/src/preact-render-spy.js:423:7)
      at RenderContext.render (node_modules/preact-render-spy/src/preact-render-spy.js:462:10)
      at deep (node_modules/preact-render-spy/src/preact-render-spy.js:472:76)
      at shallow (node_modules/preact-render-spy/src/preact-render-spy.js:473:25)
      at Object.<anonymous> (src/tests/Price.test.js:13:21)
      at process._tickCallback (internal/process/next_tick.js:109:7)
yaditya commented 4 years ago

I can confirm this problem. After almost 2 years, is there a resolution?