繁体   English   中英

node - 在 esm 包中使用 jest

[英]node - using jest with esm package

我想知道如何将esmhttps://www.npmjs.com/package/esm与节点后端的 jest 结合起来。

我尝试在文件的最顶部使用require("esm")require("esm")(module)设置安装文件,但它仍然给我SyntaxError: Unexpected token error。

我以前会使用node -r esm但 jest 不支持这个。

当您执行require("esm")(module) ,将其视为您正在创建一个 esm-transformer 函数,该函数正等待将文件转换为 ES 模块。

这是我对 node v8+ 的尝试:

  • 默认jest配置

  • 默认esm配置

在此处输入图片说明

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')

在此处输入图片说明

希望这可以帮助!

Jest 文档在页面ECMAScript Modules上介绍了这一点:

  1. 确保您通过传递 transform: {} 或以其他方式配置您的转换器以发出 ESM 而不是默认的 CommonJS (CJS) 来禁用代码转换。

  2. 使用 --experimental-vm-modules 执行节点,例如 node --experimental-vm-modules node_modules/.bin/jest 或 NODE_OPTIONS=--experimental-vm-modules npx jest 等。在 Windows 上,您可以使用 cross-env能够设置环境变量。

  3. 除此之外,我们尝试遵循节点的逻辑来激活“ESM 模式”(例如查看 package.json 或 mjs 文件中的类型),有关详细信息,请参阅他们的文档。

  4. 如果您想将其他文件扩展名(例如 ts)视为 ESM,请使用 extensionsToTreatAsEsm 选项。

require("esm")是堂兄,它可能require("esm")(module/*, options*/)

以下package.json可能对您有所帮助。

{
  "name": "ESMPak",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "esm": "^3.0.84"
  }
}

我使用以下步骤创建了正常的node.js项目。

  1. 使用npm i esmyarn add esm添加esm
  2. 创建index.js

    require = require("esm")(module/*, options*/); module.exports = require("./main.js");

  3. 创建main.js

    export {}

  4. 并运行node -r esm main.js

如果您想了解更多信息请fllow 链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM