Reactjs test sinon spy mocked функция возвращает функцию, а не логическое значение - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь проверить, что метод formIsValid в моем компоненте InformationGatheringFormContainer вызывает один из компонентов (isInfoFormValid), когда он выполняет:

export class InformationGatheringFormContainer extends React.Component{
...
formIsValid() {
    this.props.isInfoFormValid(this.state.invalid);
}

Для этого яЯ использую шпионскую функцию sinon:

it('formIsValid changes the state', () => {
    const mockFunction = sinon.spy();

    const baseProps = {
        isInfoFormValid: mockFunction,
    }

    const wrapper = shallow(<InformationGatheringFormContainer {...baseProps} />);
    wrapper.instance().formIsValid();
    expect(mockFunction).to.have.been.calledOnce.equal(true);

})

Я ожидаю, что это сработает, однако этот тест дает:

AssertionError: expect(received).to.equal(expected)

Expected value to equal:
  true
Received:
  [Function proxy]

Difference:

  Comparing two different types of values. Expected boolean but received function.

Таким образом, вызов функции действительно обнаружен, но .to.have.been.calledOnceферментативный метод не возвращает логическое значение здесь, по-видимому.

Я новичок в юнит-тестах Reactjs, и я немного растерялся.Как возврат .to.have.been.calledOnce может иметь тип, отличный от логического?

Заранее благодарю за помощь

Ответы [ 2 ]

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

Я также нашел другой способ сделать это:

expect(mockFunction.callCount).toEqual(1);
0 голосов
/ 06 декабря 2018

Похоже, calledOnce - это свойство синона-шпиона , а не ожидание шута .Итак, что-то вроде:

expect(mockFunction.calledOnce).toEqual(true);

должно работать (если вы предпочитаете sinon).

Стоит отметить, что шут имеет свой собственный механизм насмешки :

it('formIsValid changes the state', () => {
    const isInfoFormValid = jest.fn();

    const baseProps = {
        isInfoFormValid,
    }

    const wrapper = shallow(<InformationGatheringFormContainer {...baseProps} />);
    wrapper.instance().formIsValid();
    expect(isInfoFormValid).toHaveBeenCalledTimes(1);

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