Jest.js - 测试是否已调用组件方法(React.js)

时间:2018-03-29 00:31:34

标签: javascript reactjs jasmine tdd jestjs

我有以下类组件:

export class HelloWorld extends Component {
    constructor(props) {
        super(props)
        this.methodA = this.methodA.bind(this)
        this.methodB = this.methodB.bind(this)
    }

    methodA(props) {
        if (props.someValue === true) {
            ......
            methodB(props.someValue, true)
        } else {
            ......
            methodB(props.someValue, false)
        }
    }
    ...
    ...
}

我基本上打电话给methodA用某些参数调用methodB我必须通过它。

在Jest中,我很难编写methodB中已调用methodB的测试覆盖率

describe('componentA', () => {
    it('should call componentB', () => {
        const wrapper = enzyme.shallow(<HellowWorld {...(Object.assign(baseProps, { smsStatus: 'VALID' }))} />)

        const spyFn = {
            methodB: () => jest.fn()
        }
        const spyPreventDefault = jest.spyOn(spyFn, 'methodB')
        wrapper.instance().methodA(baseProps)
        expect(spyPreventDefault).toHaveBeenCalled()
    })
})

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你试图将间谍挂在客观的spyFn上,这与<HellowWorld/>完全无关。 您是否只想在methodB <HellowWorld/>进行间谍活动? 如果是这样,这是你的测试

describe('componentA', () => {
  it('should call componentB', () => {
    const wrapper = enzyme.shallow(<HellowWorld {...(Object.assign(baseProps, { smsStatus: 'VALID' }))} />)

    const spyPreventDefault = jest.spyOn(wrapper.instance(), 'methodB');
    wrapper.instance().forceUpdate();
    wrapper.instance().methodA(baseProps)
    expect(spyPreventDefault).toHaveBeenCalled()
  })
})