JavaScript тесты - насмешливая функция из того же модуля с шуткой - PullRequest
0 голосов
/ 02 октября 2018

Я уже некоторое время пытался найти ответ на эту проблему, но мне это не удалось.Поэтому я решил попробовать здесь.Если такой вопрос уже есть, и я пропустил его, прошу прощения за дубликат.

Предположим, у меня есть этот модуль javascript 'myValidator.js', где две функции, и одна функция вызывает другую.

export const validate = (value) => {
  if (!value.something) {
    return false
  }

  // other tests like that
  return true
}

export const processValue = (value) => {
  if (!validate(value)) {
    return null
  }

  // do some stuff with value and return something
}

Проверьте это следующим образом.Я хочу проверить функцию проверки, правильно ли она ведет себя.И тогда у меня есть функция processValue, которая вызывает первое и возвращает некоторое значение, когда проверка правильна или равна нулю.

import * as myValidator from './myValidator'

describe('myValidator', () => {
  describe('validate', () => {
    it('should return false when something not defined', () => {
      ...
    }
  }

  describe('processValue', () => {
    it('should return something when value is valid', () => {
      const validateMock = jest.spyOn(myValidator, 'validate')
      validateMock.mockImplementation(() => true)
      expect(validate('something')).toEqual('somethingProcessed')
    }

    it('should return null when validation fails', () => {
      const validateMock = jest.spyOn(myValidator, 'validate')
      validateMock.mockImplementation(() => false)
      expect(validate('somethingElse')).toEqual(null)
    }
  }
}

Теперь проблема в том, что это на самом деле не работает, так как processValue() фактически вызываетфункция внутри модуля, из-за замыкания, я полагаю.Таким образом, функция не является поддельной, так как, я думаю, только ссылка в экспорте заменяется на шутливую.

Я нашел решение для этого и внутри модуля использовать

if (!exports.validate(value)) 

, который работает для тестов.Однако мы используем Webpack (v4) для сборки приложения, поэтому оно преобразует эти экспорты в свою собственную структуру, а затем при запуске приложения exports не определяется и код завершается ошибкой.

Какое лучшее решениечтобы проверить это?

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

Или лучшечтобы не издеваться над функциями и не вызывать их, чтобы избежать возникшей у меня проблемы или есть какой-то способ, как этого добиться с помощью модулей JavaScript?

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