我试图检查我的formIsValid
组件中的InformationGatheringFormContainer
方法在执行时是否正在调用组件props之一(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
的返回值与布尔值如何具有不同的类型?
预先感谢您的帮助
答案 0 :(得分:0)
看起来像calledOnce
is a sinon spy property,而不是jest's expect。
因此,类似:
expect(mockFunction.calledOnce).toEqual(true);
应该可以工作(如果您更喜欢sinon
)。
值得注意的是jest has his own mocking mechanism:
it('formIsValid changes the state', () => {
const isInfoFormValid = jest.fn();
const baseProps = {
isInfoFormValid,
}
const wrapper = shallow(<InformationGatheringFormContainer {...baseProps} />);
wrapper.instance().formIsValid();
expect(isInfoFormValid).toHaveBeenCalledTimes(1);
})
答案 1 :(得分:0)
我还找到了另一种方法:
expect(mockFunction.callCount).toEqual(1);