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

Я новичок в JEST, и в настоящее время я тестирую компонент Javascript, который выполняет вызов API в своем onComponentDidMount.В зависимости от возвращаемых данных вызова ajax (вызова API) мой компонент отображает либо таблицу, либо простой текст.

Мой JEST-тест довольно прост, на данный момент я тестирую только на соответствие текущим снимкам.Так как мой вызов API может возвращать разные данные, мой снимок может иметь два разных аспекта: 1) один с таблицей 2) один с простым текстом.

Я успешно смоделировал службу таким образом

jest.mock("/myService", () => ({
  index: (data, callback) => {
    const return = [
      {
        {...}
      },
    ]
    callback(return)
  },
}))

Мой компонент выполняет myService.index() вызов правильно, все, что я хочу передать ему различные значения, которые он собирается использовать для обратного вызова.

Вот как это выглядит

it("has proper snapshot", () => {
    const props = {...}
    const component = shallow(<MyComponent {...props} />)
    expect(component).toMatchSnapshot()
  })

Это прекрасно работает для первого примера, но я не могу найти правильный ответ, который мне подходит.Вы можете мне помочь ?:)

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Если вам нужна функция с состоянием, которая возвращает несколько значений при многократном вызове, вы можете создать IFFE , который возвращает функцию с доступом к закрывающей переменной (состоянию), например:

const f = (() => {
  let first = true
  return () => {
    if (first) {
      first = false
      return {a: 1, b: 2}
    } else {
      return {}
    }
  }
})()

console.log(f())
console.log(f())
0 голосов
/ 21 декабря 2018

Пожалуйста, отметьте Jest Docs на этом.Вы можете возвращать разные значения при насмешке над функцией и один раз вернуть желаемое значение, а затем - другое значение.

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