Javascript 使用Ezyme mount进行Facebook登录-TypeError无法读取属性';parentNode';未定义的

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

我有一个非常简单的React组件,它只包含一个FacebookLogin组件:

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)