-
-
Notifications
You must be signed in to change notification settings - Fork 97
Description
I'm integrating preact-compat into create-react-app without ejecting and had quite a lot of success doing it so far.
My setup
For the Jest tests, I managed to use moduleNameMapper to use the preact-* testing utilities instead of anything from React, something similar to this:
{
'^react-dom/server$': '<rootDir>/node_modules/preact-render-to-string/dist/index.js',
'^react-dom/test-utils$': '<rootDir>/node_modules/preact-test-utils/lib/index.js',
'^react-dom$': '<rootDir>/node_modules/preact-compat-enzyme/lib/index.js',
'^react-test-renderer/shallow$': '<rootDir>/node_modules/preact-test-utils/lib/index.js',
'^react-test-renderer$': '<rootDir>/node_modules/preact-test-utils/lib/index.js',
'^react-addons-test-utils$': '<rootDir>/node_modules/preact-test-utils/lib/index.js',
'^react-addons-transition-group$': '<rootDir>/node_modules/preact-transition-group/dist/preact-transition-group.js',
'^react$': '<rootDir>/node_modules/preact-compat-enzyme/lib/index.js'
}The issue
While running the Jest tests, I've run into an issue when using renderToJsxString directly to expect(renderToJsxString(<SomeComponent></SomeComponent>)).toMatchSnapshot(); there are __source and __self attributes on every component in the output.
The output looks similar to this:
<div
__source={
Object {
"fileName": "<some-path-here>/src/components/mainframe/MainFrame.js",
"lineNumber": 9
}
}
>
<cl
src=""
id="main-app-iframe"
__source={
Object {
"fileName": "<some-path-here>/src/components/mainframe/MainFrame.js",
"lineNumber": 10
}
}
class="tst-app-frame"
>
</cl>
</div>I managed to fix this by supplying my own attributeHook, but it means that I needed to recreate all of the functionality from within which is not the best for keeping in sync with updates.
This is all I wanted to add inside attributeHook
if (name === '__source' || name === '__self') {
return '';
}The opts I'm passing to renderToJsxString are:
{
jsx: true,
xml: false,
functions: true,
functionNames: true,
skipFalseAttributes: false,
pretty: ' ',
shallow: true,
min: true,
attributeHook // the one mentioned above
}I'm not sure if this is by design, or something that only happens with preact-compat or if it's related to me using the moduleNameMapper setup written above.
The solution could be to have a switch to filter for these fields, it could be to have a blacklist of attributes or it could be that there's an error on my part.
Can you help to figure it out?