TypeError: require.context is not a function
See original GitHub issueHi guys,
Issue details
If you use require.context within a React component the storyshots will fail with TypeError: require.context is not a function.
Steps to reproduce
Just write require.context() in any of the component.
This is mine:
import React from 'react';
import PropTypes from 'prop-types';
import DefaultProps from '../../helpers/default-props';
const lineIcons = require.context('../../assets/icons/Line', true, /.+\.svg$/);
const solidIcons = require.context('../../assets/icons/Solid', true, /.+\.svg$/);
const requireAll = requireContext => requireContext.keys().map(requireContext);
const toObjectNames = (state, icon) => ({ ...state, [icon.default.id]: icon.default.id });
const icons = {
Line: requireAll(lineIcons).reduce(toObjectNames, {}),
Solid: requireAll(solidIcons).reduce(toObjectNames, {}),
};
const Icon = ({
glyph, type = 'Line', width = 14, height = 14, className = 'icon', fill = 'currentColor', ...rest
}) => (
<svg {...rest} className={className} width={width} fill={fill} height={height}>
<use xlinkHref={`#${type} ${glyph}`} />
</svg>
);
Icon.propTypes = {
...DefaultProps,
/** icon name, just exactly how the file is named */
glyph: PropTypes.string.isRequired,
/** main folder where lays this file, could be `Line | Solid` */
type: PropTypes.oneOf(['Line', 'Solid']),
/** width, which is set to <svg> */
width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
/** height, which is set to <svg> */
height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
/** fill (color), which is set to <svg> */
fill: PropTypes.string,
};
export default Icon;
export {
icons,
};
Please specify which version of Storybook and optionally any affected addons that you’re running
- storybook/react ^3.2.16 (my is 3.2.16)
- storybook/addon-storyshots ^3.2.16 (my is 3.2.16)
Affected platforms
Any OS any build.
Screenshots / Screencast / Code Snippets (Optional)
// content of storyshots.test.js
import initStoryshots from '@storybook/addon-storyshots';
global.window = global;
window.addEventListener = () => {};
window.requestAnimationFrame = () => {
throw new Error('requestAnimationFrame is not supported in Node');
};
initStoryshots({ /* configuration options */ });
Issue Analytics
- State:
- Created 6 years ago
- Comments:29 (12 by maintainers)
Top Results From Across the Web
How to resolve “TypeError: require.context is not a function” in ...
While we were writing Jest tests, we ran into an the error “TypeError: require.context is not a function”. This is because of the...
Read more >How can I mock Webpack's require.context in Jest?
With this function, you don't need to change any require.context call, it will execute with the same behavior as it would (if it's...
Read more >Why does require.context(Webpack) fail when using new ...
context is not a function " vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in mounted hook: "TypeError: __webpack_require__(.
Read more >require.context is not a function - My-Blog
... TypeError: require.context is not a function at read ... at Module.load (internal/modules/cjs/loader.js:1040:32) at Function.Module.
Read more >Module Methods
If dependencies are not provided, factoryMethod is called with require , exports and module (for compatibility!). If this function returns a value, ...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
I had the same issue. Using CRA v3 (not ejected) with ts and I could not figure a way out to get it to work with the babel plugin or anything. Followed various solutions on different git issues but nothing worked for me, so I hacked it with these 3 lines.
This seems to solve it. No .babelrc or jest.config or setupTest.js or anything. I just add the above to replace the original line in
.storybook/config.jsBEFORE
AFTER
require.contextis a webpack-specific feature, so it doesn’t work in jest. You can try to mock it somehow