Как смоделировать функцию в шутку или предотвратить по умолчанию? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь использовать реактив-тестирование-lib для тестирования интеграции

Я хочу смоделировать функцию, как внутри моего класса реакции, под названием handleSubmit

handleSubmit(){
 // does some stuff
 // calls an action creator

}

Я в основном хочу заглушить этот метод, чтобы он либо возвращал null / undefined, либо что-нибудь еще. Но я не хочу, чтобы это действительно называло создателя действия

Причина, по которой я хотел заявить о наличии некоторого пользовательского интерфейса, и вызов создателя действия вызывает у меня ошибку:

Действия должны быть простыми объектами. Используйте пользовательское промежуточное ПО для асинхронных действий.

Я тоже пытался jest.mock(thismethod) и jest.spyOn () `, но ни один из них не работает. Я просто хочу сделать что-то вроде

myFunc() {

}

как будто это пустая функция и ничего не делает. Как я могу заглушить это?

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Попробуйте ниже макетирование функции и действия:

//Mock function
 var mockPromise = new Promise((resolve, reject) => {
    resolve(<mock response similar to actual promise response>);
});
functionName = jest.fn().mockReturnValueOnce(mockPromise)

//Mock action
const actions = [];
const dispatchAction = jest.fn((dispatchCall) => {
      actions.push(dispatchCall);
});

functionName()(dispatchAction);
expect(dispatchAction).toBeCalledTimes(1)
0 голосов
/ 08 мая 2019

Похоже, handleSubmit является методом-прототипом ... если это так, то вы можете смоделировать его следующим образом:

import * as React from 'react';
import { render, fireEvent } from 'react-testing-library';

class MyComponent extends React.Component {
  handleSubmit() {  // <= prototype method
    throw new Error('should not get here');
  }
  render() {
    return (<button onClick={this.handleSubmit}>the button</button>);
  }
}

test('MyComponent', () => {
  const mock = jest.spyOn(MyComponent.prototype, 'handleSubmit');
  mock.mockImplementation(() => {});  // <= replace the implementation

  const { getByText } = render(<MyComponent/>);
  fireEvent.click(getByText('the button'));

  expect(mock).toHaveBeenCalled();  // Success!
});

Просто убедитесь, что реализовали макет на прототипе перед рендерингом компонента.

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