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

Jest error #300

Closed
reinos opened this issue Jan 18, 2024 · 4 comments
Closed

Jest error #300

reinos opened this issue Jan 18, 2024 · 4 comments

Comments

@reinos
Copy link

reinos commented Jan 18, 2024

Hi,

Running Jest on a file where we imported the mime package result in an error

 Details:

    /Users/reinos/Sites/Storro/app.storro/node_modules/mime/dist/src/index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import otherTypes from '../types/other.js';

This happen on "mime": "^4.0.1"

Is this a known issue?

@broofa
Copy link
Owner

broofa commented Jan 18, 2024

Not actionable.

  • No error message included. I have no idea what your problem is.
  • Incomplete stack trace. The one stack frame shown isn't the actual code. It's been bundled by some 3rd party tool. Jest? Rollup? ESBuild? ... something.
  • The code in question works in CI
  • ... and for other users (image)
  • No recipe for reproducing the problem provided

If/when you want to put together an MRE that clearly demonstrates the issue and allows me to reproduce the problem I'm happy to reopen.

@broofa broofa closed this as completed Jan 18, 2024
@ifree92
Copy link

ifree92 commented Jan 25, 2024

I can describe my case here.
This is probably because you're trying to test using jest that uses CommonJS by default without transforming the mime into CommonJS (cos mime@4 requires ES Module).

So, in my case I had the following error:

✗ npm run test src/renderer/App.test.tsx      

> edisen-transfer-app@0.6.3 test
> jest --maxWorkers=1 src/renderer/App.test.tsx

 FAIL  src/renderer/App.test.tsx
  ● Test suite failed to run

    Jest encountered an unexpected token

    Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.

    Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.

    By default "node_modules" folder is ignored by transformers.

    Here's what you can do:
     • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
     • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
     • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     • If you need a custom transformation specify a "transform" option in your config.
     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/configuration
    For information about custom transformations, see:
    https://jestjs.io/docs/code-transformation

    Details:

    /Users/ihor.levchenkoedisen.com/Projects/edisen/edisen-electron/node_modules/mime/dist/src/index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import otherTypes from '../types/other.js';
                                                                                      ^^^^^^

    SyntaxError: Cannot use import statement outside a module

    > 1 | import mime from 'mime';
        | ^
      2 |
      3 | /**
      4 |  * @see https://bitbucket.org/vigorsystemsinc/edisen-ui/src/master/src/v2/definitions/fileExtensionToMime.config.js

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1505:14)
      at Object.<anonymous> (src/renderer/pages/UploadSelectorPage/utils/extractFileMimeTypeByFullName.ts:1:1)
      at Object.<anonymous> (src/renderer/pages/UploadSelectorPage/utils/extractFileObject.ts:1:1)
      at Object.<anonymous> (src/renderer/pages/UploadSelectorPage/hooks/useDragNDrop.ts:3:1)
      at Object.<anonymous> (src/renderer/pages/UploadSelectorPage/DragNDrop.tsx:5:1)
      at Object.<anonymous> (src/renderer/pages/UploadSelectorPage/UploadSelectorPage.tsx:12:1)
      at Object.<anonymous> (src/renderer/pages/UploadSelectorPage/index.ts:1:1)
      at Object.<anonymous> (src/renderer/pages/Router.tsx:4:1)
      at Object.<anonymous> (src/renderer/App.tsx:5:1)
      at Object.<anonymous> (src/renderer/App.test.tsx:3:1)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        2.902 s
Ran all test suites matching /src\/renderer\/App.test.tsx/i.

The solution for me was just to slightly change the jest config by adding mime into jest.transformIgnorePatterns in package.json:

// Before
{
  "jest": {
    "transformIgnorePatterns": ["node_modules/(?!(react-dnd|dnd-core|@react-dnd|react-dnd-html5-backend)/)"]
  }
}

// After
{
  "jest": {
    "transformIgnorePatterns": ["node_modules/(?!(mime|react-dnd|dnd-core|@react-dnd|react-dnd-html5-backend)/)"]
  }
}

@reinos
Copy link
Author

reinos commented Jan 30, 2024

This also fixed my issue. @ifree92 thanks for pointing out!

@0cv
Copy link

0cv commented Feb 6, 2024

Thanks the solution of @ifree92 is working, but there are a few more things to add as that was not enough for me. Babel needs to be added:

jest.config.ts

{
...
    transform: {
        '^.+\\.js?$': 'babel-jest',
        ...
    },
    ...
    transformIgnorePatterns: ['/node_modules/(?!mime)'],
}

babel.config.json

{
    "presets": [
        "@babel/preset-env"
    ]
}

And then, install the npm packages @babel/preset-env and babel-jest.

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

4 participants