Как проверить переменные, которые существуют внутри модуля - PullRequest
0 голосов
/ 25 января 2020

Как я могу проверить что-то вроде этого:

const map = new Map<string, string>();

export function handleLogic() {
  // some code 
  if (!map.has(id)) {
    // do some stuff
  } else {
    // do some stuff
  }
}

Я хочу условно проверить оператор if. Я знаю, что могу экспортировать карту const, но я не думаю, что мне нужно выставлять карту const.

Есть ли способ добавить идентификатор на карту, чтобы я мог проверить остальное, не экспортируя карту const?

Надеюсь, вы дадите мне некоторое представление.

1 Ответ

1 голос
/ 25 января 2020

Вы можете сделать 2 теста:

  • Первый экземпляр new Map(), применить его //some code без установки идентификатора, затем вызвать handleLogic()
  • Второй экземпляр new Map(), примените его //some code и установите идентификатор для вашей карты с помощью yourMap.set('id', '123'), затем вызовите handleLogic()

Тогда вы бы применили свое заявление if.

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

По запросу, вот как я бы это реализовал. Я предполагаю, что вы не хотите передавать параметр в вашу функцию handleLogic(), поэтому вам придется играть с вашей функцией context. Например:

// main.js
const map = new Map();

export function handleLogic() {
  this.map.set('john', 'doe')  // Here we use current context, this.map === map
  if (!this.map.has('id')) return false
  return true
}

Ваш тестовый файл может выглядеть так:

// main.test.js
import { handleLogic } from './main'

test('it returns false without id', () => {
  const map = new Map()
  map.set('foo', 'bar')
  expect(handleLogicHandler(map)).toBe(false)
})

test('it returns true with id', () => {
  const map = new Map()
  map.set('foo', 'bar')
  map.set('id', '123')
  expect(handleLogicHandler(map)).toBe(true)
})

function handleLogicHandler(map) {
  this.map = map   // Here we define our own testing context
  return handleLogic.apply(this)  // and apply it to the function
}

...