【发布时间】:2020-09-10 10:01:13
【问题描述】:
我正在尝试将 jest-node-environment 的扩展名创建为 CustomTestEnvironment,但在尝试运行 jest 时出现以下错误
● Test suite failed to run
~/git/my-application/tests/environment/custom-test-environment.ts:1
import NodeEnvironment from 'jest-environment-node';
^^^^^^
SyntaxError: Cannot use import statement outside a module
at runTestInternal (../node_modules/jest-runner/build/runTest.js:226:5)
我相信这个错误意味着它没有将其识别为打字稿文件,并且没有对其进行转译。 (我用的是最新版的jest 26.0.1)
根据 jest github 中的讨论,完成这项工作的 PR 原定于 Jest 26,但已从 Jest 26 中撤出,并且(希望)将出现在 Jest 27 中。 https://github.com/facebook/jest/pull/8751
话虽如此,我在网上看到过一些人这样做的样本,但对我来说,我没有任何运气跟随他们的领导。
import NodeEnvironment from "jest-environment-node";
import {LocalObject} from "./object/local-object.helper";
export class CustomTestEnvironment extends NodeEnvironment {
public async setup(): Promise<void> {
await super.setup();
this.global.localObject = LocalObject.init()
}
public async teardown(): Promise<void> {
LocalObject.teardown(this.global.localObject)
await super.teardown();
}
}
LocalObject 只是测试实用程序的一个薄包装器,它具有复杂的启动和拆卸,我想将其提供给测试,以便能够发布测试数据并启动组件测试。
如果我将导入更改为需要 -
const NodeEnvironment = require("jest-environment-node");
const {LocalObject} = require("./object/local-object.helper");
然后我得到了这个错误 -
SyntaxError: Unexpected token 'export'
如果我将导出内容移到 module.exports 中,则会出现以下错误
public async setup(): Promise<void> {
^^^^^
SyntaxError: Unexpected token 'async'
在我看来,它没有将此文件视为打字稿。
是否有任何解决方法可以将其用作打字稿文件? LocalObject 是用 typescript 编写的,所以我相信我需要将它作为 typescript 才能正确使用它,重要的是 LocalObject 文件仍然是 typescript 以便测试文件正确使用它。
替代问题:
我可以在setupFilesAfterEnv 中执行相同类型的设置/拆卸逻辑吗?我只看到它们是在测试之前运行的,但不是在测试之后运行的。谢谢。
【问题讨论】:
-
您解决了这个问题了吗?我现在遇到了同样的问题。
-
不,我必须改用
setupFilesAfterEnv。 (见答案)
标签: javascript typescript jestjs automated-tests