【问题标题】:How to use ES6 in a custom Jest Node Environment?如何在自定义 Jest 节点环境中使用 ES6?
【发布时间】:2021-04-28 22:40:18
【问题描述】:

到目前为止,我可以在我的测试文件中完美地使用 ES6 语法,但是当我尝试设置自定义 jest-enviroment 时,我无法在那里使用该语法。然后无法测试任何东西。

我的自定义 jest-node-enviroment 如下所示:


const Crawler = require('../../src/parser/crawler/Crawler.js');


const NodeEnvironment = require("jest-environment-node")
module.exports = class Environment extends NodeEnvironment {
  async setup() {

    await super.setup()

    if (!this.global.crawler) {
      this.global.crawler = Crawler;
      await super.setup()
    }
  }

  async teardown() {
    await super.teardown()
  }

  runScript(script) {
    return super.runScript(script)
  }
}


然后当我运行测试时:


pkg ▶ yarn test
yarn run v1.22.10
$ jest
Determining test suites to run...Setting Up Test ENV
 FAIL  test/crawler/crawler.test.js
  ● Test suite failed to run

    /the/path/to/the/pkg/src/parser/crawler/Crawler.js:1
    import puppeteer from 'puppeteer-core'
    ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      1 | 
    > 2 | const Crawler = require('../../src/parser/crawler/Crawler.js');
        |                 ^
      3 | 
      4 | 
      5 | const NodeEnvironment = require("jest-environment-node")

      at Object.<anonymous> (test/config/environment.js:2:17)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        0.039 s
Ran all test suites.
Teardown Crawler


我在所有代码中都使用 ES6,因为我在启动时设置了 @babel-register。 我想保持这种状态。

jest.config.js 看起来像:

{
...
globalSetup: "./test/config/setup.js",
globalTeardown: "./test/config/teardown.js",
testEnvironment: "./test/config/environment",
transform: {
   "^.+\\.jsx?$": "babel-jest"
  }
}

我在 Babel、Jest 的文档以及这里和互联网上的许多“解决方案”中进行了挖掘,但每个人都说同样的话,没有人谈论如何在自定义环境中使用它。

【问题讨论】:

  • 当前 Jest 版本不支持。试试jest@next。您没有在 setupFiles 中执行此操作的原因是什么?
  • 感谢@jonsharpe 的提示。我对这个关闭单元测试和玩笑是新手,我不知道我可以在“设置”文件上设置全局变量。会试试吗????
  • 感谢 Estus Flask,编辑 cmets 功能在这里一团糟。

标签: node.js unit-testing jestjs es6-modules babel-jest


【解决方案1】:

不使用自定义环境很好地解决了部分问题。

它有点不符合人体工程学,因为现在没有全局参考可以放入。但它有效。

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2023-02-19
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多