admin管理员组

文章数量:1279016

I was wondering how I would incorporate the esm package with jest on a node backend.

I tried setting up a setup file with require("esm") and require("esm")(module) at the very top of the file, but it's still giving me the SyntaxError: Unexpected token error.

I would have previously used node -r esm but jest doesn't support this.

I was wondering how I would incorporate the esm package https://www.npmjs./package/esm with jest on a node backend.

I tried setting up a setup file with require("esm") and require("esm")(module) at the very top of the file, but it's still giving me the SyntaxError: Unexpected token error.

I would have previously used node -r esm but jest doesn't support this.

Share Improve this question edited Nov 7, 2018 at 3:54 A. L asked Nov 1, 2018 at 4:25 A. LA. L 12.7k29 gold badges98 silver badges178 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 8 +50

When you perform require("esm")(module), think of it as you are creating an esm-transformer function that is pending a file to be transformed into an ES module.

Here's my attempt with node v8+ with:

  • default jest configuration

  • default esm configuration

utils-1.js:

export const add = (a, b) => a + b;

utils-2.js:

export const multiAdd = array => array.reduce((sum, next) => sum + next, 0)

_test_/utils-1.assert.js

import { add } from '../utils-1';

describe('add(a,b)', () => {
  it('should return the addtion of its two inputs', () => {
    expect(add(1,2)).toBe(3);
  });
});

_test_/utils-2.assert.js

import { multiAdd } from '../utils-2';

describe('multiAdd(<Number[]>)', () => {
  it('should return a summation of all array elements', () => {
    expect(multiAdd([1,2,3,4])).toBe(10);
  })
});

_test_/utils.test.js

const esmImport = require('esm')(module);
const utils_1 = esmImport('./utils-1.assert')
const utils_2 = esmImport('./utils-2.assert')

Hope this helps!

In case anyone is still looking, the accepted answer does require a bit of effort.

You can also use the esm package with jest by transforming esm files back to cjs using jest-esm-transformer-2 (or jest-esm-transformer if you are using jest < 28)

  1. Install the package npm i jest-esm-transformer-2 --save-dev
  2. Create your jest.config.js in the root directory and configure code transform to use jest-esm-transformer-2

const config = {
  transform: {
    '.js': 'jest-esm-transformer-2'
  }
}

module.exports = config

  1. Run jest with no flags etc.

本文标签: javascriptnodeusing jest with esm packageStack Overflow