如何在自定义 Jest 节点环境中使用 ES6?

问题描述

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

我的自定义 jest-node-environment 看起来像:


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 以及这里和互联网上的许多“解决方案”中挖掘了文档,但每个人都在谈论相同的问题,没有人谈论如何在自定义环境中使用它。

解决方法

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...