Как использовать переменную в качестве возвращаемого значения в ложной функции Jest? - PullRequest
1 голос
/ 12 июня 2019

У меня сейчас есть этот код ...

const context = {};
context.response = {};
jest.mock('axios', () => ({
    defaults: {
        withCredentials: true
    },
    post: () => Promise.resolve(context.response)
}));

Когда я пытаюсь запустить, я получаю ...

babel-plugin-jest-hoist: Фабрика модулейиз jest.mock() не разрешено ссылаться на какие-либо переменные вне области действия.

Я хочу иметь возможность легко изменять объект ответа без сброса и повторной привязки.Есть ли хороший способ сделать это?

1 Ответ

4 голосов
/ 13 июня 2019

Это происходит из-за шутки babel-plugin-jest-hoist , что означает, что все ваши издевательства подняты наверх.так что вы не можете получить доступ к переменным внутри mocks.

Поскольку мы смоделировали axios, когда мы импортируем 'axios', мы получаем версию mock, поэтому мы можем использовать метод "mockImplementation" jest.fn () .

import axios from 'axios'

jest.mock('axios', () => ({
  defaults: {
    withCredentials: true
  },
  post: jest.fn()
}))

test('should...', () => {
  // mock post for your case
  axios.post.mockImplementation(() => {
    return true
  })
  expect(axios.post()).toBe(true)
})
...