Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide a Jest Transform #554

Closed
therealparmesh opened this issue Jan 29, 2020 · 8 comments
Closed

Provide a Jest Transform #554

therealparmesh opened this issue Jan 29, 2020 · 8 comments

Comments

@therealparmesh
Copy link

It may be convenient to expose something to consumers that will make it easier to use Jest - something like the default babel options (presets, plugins, etc.) or a transform module (see something like https://github.com/ActuallyACat/jest-esm-transformer).

This makes using syntax like import/export much easier for folks who use this amazing library for bundling and Jest for tests.

Thank you!

@developit
Copy link
Owner

@therealparmesh great suggestion. I see that Jest can already do this when Babel is installed, though because Microbundle abstract Babel Jest likely doesn't detect it. So I guess you're saying it would be nice if there was a Microbundle-provided option here?

If so, I agree!

@developit developit changed the title Jest transform Provide a Jest Transform Jan 29, 2020
@therealparmesh
Copy link
Author

therealparmesh commented Jan 29, 2020

Precisely what I meant!

FWIW, my current workaround is to have my Jest tests import from dist (You can see it here: https://github.com/therealparmesh/object-to-formdata/blob/b0c0be74a3e510ea8be2efa56f85e4e21ba3afa7/src/index.test.js#L1). This works well - even with features like code coverage (because of the source maps that point to the src).

@therealparmesh
Copy link
Author

Any feedback on this? 😄

@hbroer
Copy link

hbroer commented Apr 10, 2020

microbundle could save the configuration to the project root with a "This is autogenerated. Don't change it."

If microbundle would come with a "public" Babel config, it would also be possible to put a eslint config to the root with just a extend property.

@olance
Copy link

olance commented Dec 6, 2020

If you're ending up here from Google, here's an approach that worked for me:

  • Create a babel.config.js file at the project's root:
// Microbundle uses its own Babel config, so we need to make sure we use this only for tests
module.exports =
  process.env.NODE_ENV === 'test'
    ? {
        presets: [
          [
            '@babel/preset-env',
            {
              targets: {
                node: 'current',
              },
            },
            '@babel/preset-react',
          ],
          '@babel/preset-typescript',
        ],
        plugins: [
          [
            '@babel/plugin-transform-runtime',
            {
              regenerator: true,
            },
          ],
          '@babel/plugin-proposal-class-properties',
          '@babel/plugin-proposal-export-default-from',
          ['@babel/plugin-transform-react-jsx', { pragma: 'h' }],
        ],
      }
    : {}
  • You'll have to install those plugins/presets with npm install --save-dev (note that I'm using TypeScript; you might want to remove @babel/preset-typescript if you're not)
  • Make sure you add NODE_ENV=test to your test scripts, for instance:
    "test": "NODE_ENV=test jest --coverage",
    "test:no-coverage": "NODE_ENV=test jest",
    "test:watch": "NODE_ENV=test jest --coverage --watch",
  • If you have a transform option in your Jest configuration, you might need to remove it so that Jest uses the babel-jest transformer.

@marvinhagemeister
Copy link
Collaborator

Specifying a babel config for jest is the proper way to do it 👍

Closing, because shipping microbundle with a jest transform is out of scope for this project. This project's main purpose is to bundle up javascript packages for npm distribution.

@isha-bansal0115
Copy link

If you're ending up here from Google, here's an approach that worked for me:

  • Create a babel.config.js file at the project's root:
// Microbundle uses its own Babel config, so we need to make sure we use this only for tests
module.exports =
  process.env.NODE_ENV === 'test'
    ? {
        presets: [
          [
            '@babel/preset-env',
            {
              targets: {
                node: 'current',
              },
            },
            '@babel/preset-react',
          ],
          '@babel/preset-typescript',
        ],
        plugins: [
          [
            '@babel/plugin-transform-runtime',
            {
              regenerator: true,
            },
          ],
          '@babel/plugin-proposal-class-properties',
          '@babel/plugin-proposal-export-default-from',
          ['@babel/plugin-transform-react-jsx', { pragma: 'h' }],
        ],
      }
    : {}
  • You'll have to install those plugins/presets with npm install --save-dev (note that I'm using TypeScript; you might want to remove @babel/preset-typescript if you're not)
  • Make sure you add NODE_ENV=test to your test scripts, for instance:
    "test": "NODE_ENV=test jest --coverage",
    "test:no-coverage": "NODE_ENV=test jest",
    "test:watch": "NODE_ENV=test jest --coverage --watch",
  • If you have a transform option in your Jest configuration, you might need to remove it so that Jest uses the babel-jest transformer.

Can you share an example? I tried this and it does not work.

@vkruglikov
Copy link

+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants