componentDidMount 中有函数调用时 enzyme mount 失败
enzyme mount fails when there is a function call in the componentDidMount
我有一个 React 组件,其中有一个点击功能,如下所示:
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() 吗?或者任何其他解决方案表示赞赏
我认为 var js, fjs = d.getElementsByTagName(s)[0];
fjs 是 undefined
我有一个 React 组件,其中有一个点击功能,如下所示:
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() 吗?或者任何其他解决方案表示赞赏
我认为 var js, fjs = d.getElementsByTagName(s)[0];
fjs 是 undefined