【发布时间】: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