在 testRunner 设置为 jest-circus 的情况下访问 jasmine 会导致:ReferenceError: jasmine is not defined

Posted

技术标签:

【中文标题】在 testRunner 设置为 jest-circus 的情况下访问 jasmine 会导致:ReferenceError: jasmine is not defined【英文标题】:Accessing jasmine with testRunner set to jest-circus results in: ReferenceError: jasmine is not defined 【发布时间】:2021-04-29 12:29:13 【问题描述】:

默认jest 允许您简单地访问jasmine 全局。但是,一旦您将testRunner 切换到jest-circusjasmine 就未定义。以下是一个最小的、可重现的示例:

babel.config.js

module.exports = 
  presets: [["@babel/preset-env",  targets:  node: "current"  ]],
;

jasmine.spec.js

it("check jasmine", () => 
  console.log(jasmine);
);

jest.config.js

module.exports = 
  rootDir: ".",
  testRunner: "jest-circus/runner",
;

package.json


  "name": "test-jest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "test": "jest"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "@babel/core": "^7.12.10",
    "@babel/preset-env": "^7.12.11",
    "babel-jest": "^26.6.3",
    "jest": "^26.6.3",
    "jest-circus": "^26.6.3"
  

运行此测试将导致以下输出:

$ npm test

> test-jest@1.0.0 test /Users/yusufaran/Projects/test/test-jest
> jest

 FAIL  ./jasmine.spec.js
  ✕ check jasmine (1 ms)

  ● check jasmine

    ReferenceError: jasmine is not defined

      1 | it("check jasmine", () => 
    > 2 |   console.log(jasmine);
        |               ^
      3 | );
      4 | 

      at Object.<anonymous> (jasmine.spec.js:2:15)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        1.01 s
Ran all test suites.
npm ERR! Test failed.  See above for more details.

如果您删除/注释 jest.config.js 中的 testRunner 行(因此它会退回到默认运行器),它会按预期工作。

问题

如何在testRunner 设置为jest-circus/runner 的情况下访问全局jasmine 对象?如果我不能,为什么?

【问题讨论】:

【参考方案1】:

使用 jest-circus 时无法访问 jasmine。这是设计使然。 jest-circus 是一个从头开始构建的新测试运行器。它模仿 jasmine 功能来定义测试(即describeit,除了expect 断言和间谍之外的所有内容)。

如果你依赖 jasmine,那么 npm install -D jest-jasmine2 并在你的 jest 配置中使用它:


  testRunner: 'jest-jasmine2'

【讨论】:

【参考方案2】:

只需将 testRunner: 'jasmine2' 添加到 jest.config.js 就可以了

【讨论】:

这就是在接受的答案中所建议的...... 不,我的回答没有要求你安装 jest-jasmine2 也没有要求你为 testRunner 使用 jest-jasmine2 我知道我在这里错过了jest-,抱歉 请注意,这不适用于 Jest 28(撰写本文时即将发布的版本),届时将需要安装 jest-jasmine2

以上是关于在 testRunner 设置为 jest-circus 的情况下访问 jasmine 会导致:ReferenceError: jasmine is not defined的主要内容,如果未能解决你的问题,请参考以下文章

unittest模块在linux报错: AttributeError: module 'unittest' has no attribute 'TestRunner'(

运用TextSuite和TestRunner运行测试脚本

运用TextSuite和TestRunner运行测试脚本

在 jest testrunner 中运行时,Mongoose 模型函数超时

java - 如何使用SpringJUnit4TestRunner在junit测试中隐藏spring boot banner.txt?

Junit 核心——测试类(TestCase)测试集(TestSuite)测试运行器(TestRunner)