问题描述
到目前为止,我可以在我的测试文件中完美地使用 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 以及这里和互联网上的许多“解决方案”中挖掘了文档,但每个人都在谈论相同的问题,没有人谈论如何在自定义环境中使用它。
解决方法
通过不使用自定义环境很好地部分解决了问题。
它有点不符合人体工程学,因为现在没有全局参考可以放入东西。但它有效。