Enzyme / Jest: как проверить, была ли вызвана поддельная функция - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь проверить вызов fetch() внутри моей функции changeIt(), используя jest / энзим.Но, очевидно, я делаю что-то не так:

example.js

import fetch from 'node-fetch'

export default class Example extends Component {
  changeIt (id, value) {
    fetch('http://localhost/set-status?id=' + id + '&value=' + value)
  }

  render () {
    return (
      <div>something </div>
    )
  }
}

example.test.js

jest.mock('node-fetch')
test('should call fetch()', () => {
  const id = 1
  const value = 50
  const fetch = jest.fn() // <- This is wrong
  const wrapper = shallow(<Example />)
  wrapper.instance().changeIt(id, value)
  expect(fetch).toHaveBeenCalled() // <- This is wrong
})

1 Ответ

0 голосов
/ 20 октября 2018

Вам нужно правильно смоделировать модуль node-fetch.Поскольку он находится в node_modules, вам нужно поместить node-fetch в папку __mocks__ на том же уровне, что и node_modules, например:

├── node_modules/
│   ├── node-fetch/
├── __mocks__/
│   ├── node-fetch.js

Внутри node-fetch.js положить:

export default jest.fn();

Наконец, импортируйте fetch в свой тестовый файл и смоделируйте его следующим образом:

import Example from './Bla';
import { shallow } from 'enzyme';
import React from 'react';
import fetch from 'node-fetch';
/**
 * Important! Import the mocked function.
 * Start the mocking with jest.mock('node-fetch').
 * Stop the mocking with jest.unmock('node-fetch').
 */    
jest.mock('node-fetch');

test('should call fetch()', () => {
  const id = 1
  const value = 50
  const wrapper = shallow(<Example />)
  wrapper.instance().changeIt(id, value)
  expect(fetch).toHaveBeenCalled() // now it works
})

Подробнее о насмешке node_modules пакетов в шутку здесь.

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