当componentDidMount中有函数调用时,酶安装失败

时间:2018-07-21 03:04:04

标签: reactjs mocha sinon enzyme

我有一个react组件,其中有一个click函数,如下所示:

    clickTwitter(e) {

    e.stopPropagation();
    let storyId = this.refs.storyToTweet.getAttribute('id');
    if (storyId != undefined) {
        let storyIdValue = this.props.storyId;
        this.postOnTwitter(storyIdValue);
    }
}

,在componentDidMount中,我有以下内容:

    componentDidMount(){
    this.fbInit();
}

fbInit(){
    return facebookInitializer= function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = `https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.12&appId=${FACEBOOK.appId}&autoLogAppEvents=1`;
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk');

}

我有以下测试案例:

        it('should call the clickTwitter method once', () => {
        // creates the spy for the clickTwitter method
        let clickTwitterSpy = sinon.spy(StoryMedia.prototype, 'clickTwitter');
        let props={

        }
        // wraps the component by using the enzyme mount method
        const wrapper = mount(<StoryMedia/>);

        // simulates a user clicking the twitter button
        wrapper.find('.shareTwitterDummy').simulate('click');
        // asserts that the clickTwitter method was called once when the button was clicked
        assert.strictEqual(StoryMedia.prototype.clickTwitter.calledOnce, true);
        // restores the method to its original state
        clickTwitterSpy.restore();
    });

运行测试时,出现以下奇怪错误:

TypeError: Cannot read property 'parentNode' of undefined....

如果我删除this.fbInit();从componentDidMount一切正常。 无论如何,我可以告诉测试忽略this.fbInit()吗?或任何其他解决方案表示赞赏

1 个答案:

答案 0 :(得分:0)

我认为var js, fjs = d.getElementsByTagName(s)[0]; fjs是undefined