Javascript 使用Ezyme mount进行Facebook登录-TypeError无法读取属性';parentNode';未定义的
我有一个非常简单的React组件,它只包含一个FacebookLogin组件:Javascript 使用Ezyme mount进行Facebook登录-TypeError无法读取属性';parentNode';未定义的,javascript,reactjs,jestjs,enzyme,facebook-login,Javascript,Reactjs,Jestjs,Enzyme,Facebook Login,我有一个非常简单的React组件,它只包含一个FacebookLogin组件: import React, {Component} from "react" import FacebookLogin from "react-facebook-login" class Login extends Component { constructor(props) { super(props) this.facebookC
import React, {Component} from "react"
import FacebookLogin from "react-facebook-login"
class Login extends Component {
constructor(props) {
super(props)
this.facebookCallbackResponse = this.facebookCallbackResponse.bind(this)
}
facebookCallbackResponse(response) {
console.log('facebook callback response: ', response)
}
render() {
return (
<FacebookLogin
appId="my_app_id"
clientToken={"my_client_token"}
autoLoad={false}
fields="name,email"
callback={this.facebookCallbackResponse}
icon={<i className="fa fa-facebook-square"></i>}
textButton="Login"/>
);
}
}
export default Login
我的App.test.js代码如下所示,用于实际测试:
import {mount} from "enzyme"
import Login from "../component/dummy/Login"
describe("Login tests", () => {
it("Login form incomplete", () => {
const handleSubmit = jest.fn()
const facebookCallbackResponse = jest.fn()
const wrapper = mount(<Login/>)
const instance = wrapper.instance()
})
})
从“酶”导入{mount}
从“./component/dummy/Login”导入登录名
描述(“登录测试”,()=>{
它(“登录表单不完整”,()=>{
const handleSubmit=jest.fn()
const facebook callbackresponse=jest.fn()
const wrapper=mount()
const instance=wrapper.instance()
})
})
我的包.json是:
{
"name": "rental-application",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.11.9",
"@testing-library/react": "^11.2.3",
"@testing-library/user-event": "^12.6.0",
"axios": "^0.21.1",
"babel-core": "^6.26.3",
"babel-eslint": "^10.1.0",
"babel-preset-react-app": "^10.0.0",
"css-loader": "^5.0.1",
"google-maps-react": "^2.0.6",
"jquery": "^3.5.1",
"popper.js": "1.16.1",
"react": "^16.13.1",
"react-bootstrap": "^1.4.3",
"react-compound-slider": "^3.3.1",
"react-dom": "^16.13.1",
"react-facebook-login": "^4.1.1",
"react-fontawesome": "^1.7.1",
"react-google-login": "^5.2.2",
"react-notifications": "^1.7.2",
"react-scripts": "4.0.1",
"react-table": "^6.11.4",
"react-validation": "^3.0.7",
"sass-loader": "^10.1.1",
"style-loader": "^2.0.0",
"web-vitals": "^0.2.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.6",
"enzyme-to-json": "^3.4.4",
"react-test-renderer": "^16.13.1",
"react-router-dom": "^5.2.0"
},
"babel": {
"presets": [
"react-app"
]
},
"jest": {
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
}
}
}
{
“名称”:“租赁申请”,
“版本”:“0.1.0”,
“私人”:没错,
“依赖项”:{
“@测试库/jest dom”:“^5.11.9”,
“@testing library/react”:“^11.2.3”,
“@测试库/用户事件”:“^12.6.0”,
“axios”:“^0.21.1”,
“巴别塔核心”:“^6.26.3”,
“babel eslint”:“^10.1.0”,
“巴别塔预设反应应用程序”:“^10.0.0”,
“css加载器”:“^5.0.1”,
“谷歌地图反应”:“^2.0.6”,
“jquery”:“^3.5.1”,
“popper.js”:“1.16.1”,
“反应”:“^16.13.1”,
“反应引导”:“^1.4.3”,
“反应复合滑块”:“^3.3.1”,
“react dom”:“^16.13.1”,
“反应facebook登录”:“^4.1.1”,
“非常棒”:“^1.7.1”,
“反应谷歌登录”:“^5.2.2”,
“反应通知”:“^1.7.2”,
“反应脚本”:“4.0.1”,
“反应表”:“^6.11.4”,
“反应验证”:“^3.0.7”,
“sass加载程序”:“^10.1.1”,
“样式加载器”:“^2.0.0”,
“web重要信息”:“^0.2.4”
},
“脚本”:{
“开始”:“反应脚本开始”,
“构建”:“反应脚本构建”,
“测试”:“反应脚本测试”,
“弹出”:“反应脚本弹出”
},
“eslintConfig”:{
“扩展”:[
“反应应用程序”,
“react应用程序/笑话”
]
},
“浏览者”:{
“生产”:[
">0.2%",
“没有死”,
“不是全部”
],
“发展”:[
“上一个chrome版本”,
“上一个firefox版本”,
“最后1个safari版本”
]
},
“依赖性”:{
“酶”:“^3.11.0”,
“酶-适配器-反应-16”:“^1.15.6”,
“酶到json”:“^3.4.4”,
“反应测试渲染器”:“^16.13.1”,
反应路由器dom“^5.2.0”
},
“巴别塔”:{
“预设”:[
“反应应用程序”
]
},
“笑话”:{
“moduleNameMapper”:{
“\ \(jpg | jpeg | png | gif | eot | otf | webp | svg | ttf | woff | woff2 | mp4 | webm | wav | mp3 | m4a | aac | oga |)$”:“/(uu mocks |/uu/fileMock.js,
“\\(css | less)$”:“/\uu mocks\uuu/styleMock.js”
}
}
}
但当我运行测试时,我收到以下错误:
无法读取未定义类型的属性“parentNode”错误:无法读取
未定义的属性“parentNode”
在E:\Projects\personal\rental application\node\u modules\react facebook login\dist\facebook login with button.js:1:5116
at t.value(E:\Projects\personal\rental application\node\u modules\react facebook login\dist\facebook login with button.js:1:5146)
at t.value(E:\Projects\personal\rental application\node\u modules\react facebook login\dist\facebook login with button.js:1:3884)
在提交周期(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:19814:22)
在commitLayoutEffects(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:22803:7)
在htmlunknowneelement.callCallback(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:188:14)
在htmlunknowneelement.callTheUserObjectsOperation(E:\Projects\personal\rental application\node\u modules\jsdom\lib\jsdom\living\generated\EventListener.js:26:30)
在InnerInvokeeEventListeners(E:\Projects\personal\rental application\node\u modules\jsdom\lib\jsdom\living\events\EventTarget impl.js:318:25)
在invokeEventListeners(E:\Projects\personal\rental application\node\u modules\jsdom\lib\jsdom\living\events\EventTarget impl.js:274:3)
在HTMLUnknownElementImpl.\u调度(E:\Projects\personal\rental application\node\u modules\jsdom\lib\jsdom\living\events\EventTarget impl.js:221:9)
在HTMLUnknownElementImpl.dispatchEvent(E:\Projects\personal\rental application\node\u modules\jsdom\lib\jsdom\living\events\EventTarget impl.js:94:17)
在htmlunknowneelement.dispatchEvent(E:\Projects\personal\rental application\node\u modules\jsdom\lib\jsdom\living\generated\EventTarget.js:231:34)
在Object.invokeGuardedCallbackDev(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:237:16)
在invokeGuardedCallback(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:292:31)
在CommitroTimpl(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:22541:9)
以不稳定的运行优先级(E:\Projects\personal\rental application\node\u modules\react dom\node\u modules\scheduler\cjs\scheduler.development.js:653:12)
运行时优先级为$1(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:11039:10)
在Commitrout(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:22381:3)
在finishSyncRender(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:21807:3)
在PerformSyncWorkRoot(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:21793:7)
在scheduleUpdateOnFiber(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:21188:7)
在updateContainer(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:24373:3)
位于E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:24758:7
在未分段更新时(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react dom.development.js:21903:12)
在legacyRenderSubtreeIntoContainer(E:\Projects\personal\rental application\node\u modules\react dom\cjs\react-dom.development)。
{
"name": "rental-application",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.11.9",
"@testing-library/react": "^11.2.3",
"@testing-library/user-event": "^12.6.0",
"axios": "^0.21.1",
"babel-core": "^6.26.3",
"babel-eslint": "^10.1.0",
"babel-preset-react-app": "^10.0.0",
"css-loader": "^5.0.1",
"google-maps-react": "^2.0.6",
"jquery": "^3.5.1",
"popper.js": "1.16.1",
"react": "^16.13.1",
"react-bootstrap": "^1.4.3",
"react-compound-slider": "^3.3.1",
"react-dom": "^16.13.1",
"react-facebook-login": "^4.1.1",
"react-fontawesome": "^1.7.1",
"react-google-login": "^5.2.2",
"react-notifications": "^1.7.2",
"react-scripts": "4.0.1",
"react-table": "^6.11.4",
"react-validation": "^3.0.7",
"sass-loader": "^10.1.1",
"style-loader": "^2.0.0",
"web-vitals": "^0.2.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.6",
"enzyme-to-json": "^3.4.4",
"react-test-renderer": "^16.13.1",
"react-router-dom": "^5.2.0"
},
"babel": {
"presets": [
"react-app"
]
},
"jest": {
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
}
}
}
const fbScript = document.createElement('script')
fbScript.id = 'facebook-jssdk'
document.body.appendChild(fbScript)
import {configure} from "enzyme"
import Adapter from "enzyme-adapter-react-16"
configure({adapter : new Adapter()})
const fbScript = document.createElement('script')
fbScript.id = 'facebook-jssdk'
document.body.appendChild(fbScript)