Jest издеваться над одной и той же функцией дважды с разными аргументами

71
5

Я новичок в 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()
})

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

спросил(а) 2018-12-21T18:21:00+03:00 1 год, 11 месяцев назад
1
Решение
92

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

ответил(а) 2018-12-21T18:27:00+03:00 1 год, 11 месяцев назад
42

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

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

console.log(f())
console.log(f())

ответил(а) 2018-12-21T18:37:00+03:00 1 год, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема