Как сделать песочницу Jest тесты - PullRequest
0 голосов
/ 08 ноября 2018

В соответствии с документами Jest:

"Тестовые файлы в песочнице и автоматическое глобальное состояние сбрасываются для каждого теста, поэтому никакие два теста не конфликтуют друг с другом ."

Однако мойтесты конфликтуют.

Код:

// Note: op is from object-path module for deep access by dot path
let config = { name: 'Bob' }

const getConfig = path => {
  return op.get(config, path) 
}

const setConfig = (path, value) => {
  return op.set(config, path, value)
}

Тесты:

test('setConfig() updates a deep config value', () => {
  const { setConfig, getConfig } = require('services/config')

  setConfig('name', 'Woot')
  const res = getConfig('name')
  expect(res).toBe('Woot')
})

test('getConfig() updates a deep config value', () => {
  const { getConfig } = require('services/config')

  const res = getConfig('name')
  expect(res).toBe('Bob') // Actually Woot
})

Первый тест изменяет файл конфигурации, вызывая сбой второго теста.

Из моего опыта такие вещи, как process.env, не попадают в песочницу, но это?Что я не понимаю в «песочнице»?

1 Ответ

0 голосов
/ 08 ноября 2018

Похоже, что песочница в Jest происходит только для файлов по умолчанию, а не для отдельных тестов в одном и том же файле.

Это потому, что Jest не кэширует модули по умолчанию.

Однако он предоставляет функцию jest.resetModules, которую необходимо вызывать перед каждым тестом:

beforeEach(() => {
  jest.resetModules()
});

Это разархивирует ваши модули и включит песочницу.
Вы также можете настроить Jest , установив resetModules в своем package.json:

{
  "name": "my-project",
  "jest": {
    "resetModules": true
  }
}

Чтобы воспользоваться этими настройками, вам необходимо require свои модули в каждом тесте (что вы уже делаете). Я просто упоминаю об этом, потому что даже если вы позвоните jest.resetModules, ваши тесты не пройдут, если у вас будет один require вверху файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...