juliencrn / usehooks-ts

React hook library, ready to use, written in Typescript.
https://usehooks-ts.com
MIT License
6.32k stars 414 forks source link

[BUG] Upgrading to v3.1.0 breaks Jest #627

Open amattu2 opened 1 month ago

amattu2 commented 1 month ago

Describe the bug

After updating from v2.16.0 to v3.1.0, no Jest test files will execute.

    /Users/ExampleUser/Downloads/my-app/node_modules/usehooks-ts/dist/index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';
                                                                                      ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      1 | import React from 'react';
    > 2 | import { useBoolean } from 'usehooks-ts';

To Reproduce

This can be reproduced using the base create-react-app project, adding the usehooks-ts dependency, and then executing the base test case after importing usehooks-ts.

Setup Project

npx create-react-app my-app --template typescript

Add usehooks-ts Dependency

npm i usehooks-ts

Import the package

Modify the App.tsx file to import usehooks-ts. The hook doesn't matter, this example uses useBoolean

import React from 'react';
import { useBoolean } from 'usehooks-ts';
import logo from './logo.svg';
import './App.css';

function App() {
  const example = useBoolean(true);

  // .... existing code
}

Run Tests

npm run test

The tests will now fail. If you comment out the import, it works as expected.

Expected behavior

Upgrading to/beyond v3.0.0 should not impact existing projects or the execution of tests using Jest.

Additional context

Likely related to #502

eryue0220 commented 3 weeks ago

Currently, jest does not support esm syntax by default. If you want to test esm module, update the test script like the following code:

{
  "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}

More detail can check: https://jestjs.io/docs/ecmascript-modules