Node v13 / Jest / ES6 — native support for modules without babel or esm

前端 未结 4 1406
心在旅途
心在旅途 2020-12-11 00:47

Is it possible to test ES6 Modules with Jest without esm or babel? Since node v13 supports es6 natively have tried:

//         


        
相关标签:
4条回答
  • 2020-12-11 01:15

    Note that this is is still experimental, but we have documented how to test this, so there's hopefully less confusion.

    https://jestjs.io/docs/en/ecmascript-modules

    The steps in https://stackoverflow.com/a/61653104/1850276 are correct

    0 讨论(0)
  • 2020-12-11 01:25

    I followed the tips provided in the accepted answer, but I added the property "type": "module" in my package.json in order to jest works properly. This is what I done:

    In package.json:

    "devDependencies": {
        "jest": "^26.1.0",
        "jest-environment-jsdom-sixteen": "^1.0.3",
        "jest-environment-node": "^26.1.0"
      },
      "scripts": {
        "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
      },
      "type": "module",
      "jest": {
        "transform": {},
        "testEnvironment": "jest-environment-jsdom-sixteen"
      }
    
    0 讨论(0)
  • 2020-12-11 01:33

    Yes, it is possible from jest@25.4.0. From this version, there is a native support of esm, so you will not have to transpile your code with babel anymore.

    It is not documented yet, but according to this issue you have to do 3 easy steps to achieve that (At the time of writing this answer):

    • Make sure you don't transform away import statements by setting transform: {} in your jest config file
    • Run node@^12.16.0 || >=13.2.0 with --experimental-vm-modules flag
    • Run your test with jest-environment-node or jest-environment-jsdom-sixteen.

    So your jest config file should contain at least this:

    export default {
        testEnvironment: 'jest-environment-node',
        transform: {}
        ...
    };
    

    And to set --experimental-vm-modules flag, you will have to run Jest from package.json as follows (I hope this will change in the future):

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

    I hope, this answer was helpful to you.

    0 讨论(0)
  • 2020-12-11 01:40

    In addition to @Radovan Kuka's answer, here's how to run Jest with ES modules, using npx:

    "test:monitoring": "npx --node-arg=--experimental-vm-modules jest -f monitoring.test.js --detectOpenHandles",
    

    The benefit is that one doesn't need to provide the absolute node_modules path.

    0 讨论(0)
提交回复
热议问题