Как я могу импортировать Jest?

Я хотел бы избавиться от глобальных переменных в тестовом коде Jest. В частности, describe, it и expect:

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

Итак, я попытался добавить:

import {describe,it} from 'jest';

и

import jest from 'jest';

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

И другие вариации...

Но не повезло.

Как мне заставить его работать?


person guy mograbi    schedule 25.12.2016    source источник
comment
github.com/facebook/jest/issues/4473   -  person tokland    schedule 15.06.2018


Ответы (4)


Самым простым решением для этого является добавление jest: true к вашей конфигурации env в ESLint, например:

"env": {
  "browser": true,
  "node": true,
  "jasmine": true,
  "jest": true,
  "es6": true
},
person Alejandro Garcia Anglada    schedule 14.05.2017
comment
Для справки, вот все способы настройки среды ESLint ( для шутки или других ситуаций) - person Cato Minor; 21.11.2017

После того, как я понял, что Jest работает в Node.js, он понял, что я могу сделать это:

let { describe, it } = global;

Это не идеально, но на шаг ближе... теперь мне больше не нужно настраивать мой линтер с глобальными переменными.

person guy mograbi    schedule 25.12.2016
comment
Какой линтер используете? ESLint поставляется со средой Jest. - person Scimonster; 03.01.2017
comment
Стандарт @Scimonster.. НО! Я не думаю, что хочу настраивать что-то вроде шутливой среды для моего линтера, что потребовало бы от меня определения задачи линтера для каждой среды. - person guy mograbi; 04.01.2017
comment
Это также полезно, если вы используете поток или любые другие инструменты статического анализа в своих тестовых файлах. - person Mike Marcacci; 19.05.2017

Обновление 2020:

Попробуйте код ниже:

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

если вы предпочитаете явный импорт, вы можете импортировать {describe, expect, test} из '@jest/globals'.

Источник https://jestjs.io/docs/en/api

person derekbaker783    schedule 16.10.2020
comment
Если я это сделаю, метод toBeInTheDocument помечен как отсутствующий. - person Danon; 31.10.2020
comment
@Danon, следующий пост SO предполагает, что вы импортируете из неправильного места. Вам нужно установить jest-dom, чтобы включить его. stackoverflow.com/questions/56547215/ - person derekbaker783; 31.10.2020

Я также не люблю использовать или полагаться на глобальные переменные, и после копирования/вставки различных обходных путей в разных проектах я решил создать jest-without-globals в качестве очень крошечной оболочки для поддержки импорта функций Jest.

Согласно документации по использованию, его легко использовать :

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

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

Все функции, доступные в Jest API, а также jest и expect, можно импортировать из jest-without-globals.

Используя jest-without-globals, мне больше не нужно копировать/вставлять обходные пути и не нужно настраивать параметры, такие как среда jest ESLint, это просто работает как простой импорт.

Он также написан на TypeScript, поэтому у вас есть готовые наборы текста, и он полностью протестирован, чтобы убедиться, что он продолжает работать правильно.

person agilgur5    schedule 13.04.2020
comment
Теперь вы можете явно импортировать все это прямо из Jest. Подробнее см. мой ответ. - person derekbaker783; 30.04.2021