【问题标题】:How can I import Jest?如何导入 Jest?
【发布时间】:2017-05-10 12:40:51
【问题描述】:

我想在我的 Jest 测试代码中去掉全局变量。具体describeitexpect

describe('Welcome (Snapshot)', () => {
  it('Welcome renders hello world', () => {
     ...
  });
});

所以我尝试添加:

import {describe,it} from 'jest';

import jest from 'jest';

jest.describe( ...
  jest.it( ...

还有其他变体...

但没有运气。

我应该如何让它工作?

【问题讨论】:

标签: jestjs es6-modules


【解决方案1】:

2020 年更新:

试试下面的代码:

import {describe, expect, it } from '@jest/globals'

如果您更喜欢显式导入,则可以从 '@jest/globals' 导入 {describe, expect, test}。

来源https://jestjs.io/docs/en/api

【讨论】:

  • 如果我这样做,方法toBeInTheDocument 被标记为缺失。
  • @Danon,以下 SO 帖子建议您从错误的位置导入。 “您需要安装 jest-dom 才能启用它。” stackoverflow.com/questions/56547215/…
  • 请注意,为了从 @jest/globals 导入 jest,现在您需要通过将 --injectGlobals=false 作为参数传递给 jest 命令来禁用注入全局变量。有关此问题的更多信息:github.com/facebook/jest/issues/9920
【解决方案2】:

我同样不喜欢使用或依赖全局变量,在不同项目中复制/粘贴各种解决方法后,我决定创建 jest-without-globals 作为一个非常小包装器以支持导入 Jest 的功能。

Per the usage documentation,使用起来很简单:

import { describe, it, expect } from 'jest-without-globals'

describe('describe should create a section', () => {
  it('it should checkmark', () => {
    expect('').toBe('')
   })
})

Jest's API 以及jestexpect 中可用的所有函数都可以从jest-without-globals 导入。

使用jest-without-globals,我不再需要复制/粘贴变通方法,也不需要像 ESLint 的jest 环境那样配置设置,它只是作为一个简单的导入工作。

它也是用 TypeScript 编写的,因此您可以进行开箱即用的输入,而且它已经过全面测试以确保它能够正常工作。

【讨论】:

  • 您现在可以直接从 Jest 显式导入所有这些。详情请见my answer
【解决方案3】:

对此最简单的解决方案是将jest: true 添加到ESLint 中的env 配置中,如下所示:

"env": {
  "browser": true,
  "node": true,
  "jasmine": true,
  "jest": true,
  "es6": true
},

【讨论】:

【解决方案4】:

当我意识到 Jest 在 Node.js 中运行后,它意识到我可以这样做:

let { describe, it } = global;

它并不完美,但更近了一步......现在我不再需要使用全局变量配置我的 linter。

【讨论】:

  • 你用的是什么 linter? ESLint 带有一个 Jest 环境。
  • @Scimonster 标准.. 但是!我不认为我想为我的 linter 配置这样一个开玩笑的环境,这需要我为每个“环境”定义一个 linter 任务
  • 如果您对测试文件使用流或任何其他静态分析工具,这也很有帮助
猜你喜欢
  • 2019-06-09
  • 2019-05-17
  • 2016-05-25
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2021-01-21
  • 2018-03-22
相关资源
最近更新 更多