Исходное сообщение об ошибке, которое вы получили, совершенно правильное - глядя на документы Sinon , .calledOnce
- это не функция, это javascript get
, который выполняет код. В общем, ожидания Чая кажутся функциями, только если им нужны параметры.
Я нахожу это немного раздражающим, потому что get
перегрузка не очень приятна и лишает нас возможности рассуждать о коде, и это вызывает кучу ошибок, но эй хо.
Изменение вашего ожидания на
expect(floopStub).to.have.been.calledOnce;
исправляет тест (по крайней мере, на моей машине!)
Причина, по которой код кажется "работающим" во втором примере, заключается в том, что тест разрешает операцию calledOnce
get, которая проверяет условие и выбрасывает утверждение о сбое теста, поэтому никогда не возникает вероятность выбросить исходную ошибку пытаясь вызвать get
результат, как если бы это была функция.
Между прочим, легче вызвать событие щелчка с помощью встроенного в энзим .simulate()
вызова. Этот код отлично работает:
const floopStub = sinon.stub();
const wrapper = shallow(<CardWarsComponent floopThePig={floopMock}></CardWarsComponent>);
wrapper.find('#FloopButtonId').dive().simulate('click');
expect(floopStub).to.have.been.calledOnce;
Подробнее о тестировании событий реакции с синоном / ферментом можно найти здесь: https://www.leighhalliday.com/testing-react-jest-enzyme-sinon