我有一个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()吗?或任何其他解决方案表示赞赏
答案 0 :(得分:0)
我认为var js, fjs = d.getElementsByTagName(s)[0];
fjs是undefined