Alb*_*ivé 2 javascript recaptcha reactjs jestjs
我在 React 组件中有这个方法,可以在 componentDidMount 时加载Google Recaptcha API。
loadCaptcha = () => {
((d, s, id) => {
const element = d.getElementsByTagName(s)[0];
const fjs = element;
let js = element;
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = '//google.com/recaptcha/api.js';
fjs.parentNode.insertBefore(js, fjs);
})(document, 'script', 'google-recaptcha');
};
Run Code Online (Sandbox Code Playgroud)
document我在 Jest 测试文件中进行模拟时遇到问题,因为d只有.Document { location: [Getter/Setter] }undefined
我尝试添加setupFilesJest 配置,正如其他人在另一个问题中所说:
"setupFiles": ["<rootDir>/__mocks__/documentMock.js"]
documentMock.js:
Object.defineProperty(document, 'currentScript', {
value: document.createElement('script'),
});
Run Code Online (Sandbox Code Playgroud)
但没有运气。有人解决了吗?
还尝试过这个:
beforeAll(() => {
global.document: { //code }
})
Run Code Online (Sandbox Code Playgroud)
Pd:这是错误:
TypeError: Cannot read property 'parentNode' of undefined
Run Code Online (Sandbox Code Playgroud)
谢谢。
无需在 Jest 中手动模拟 JSDOM。testEnvironment如果您选择默认内部jest.config.js文件,它将被自动模拟:
testEnvironment: "jest-environment-jsdom",
Run Code Online (Sandbox Code Playgroud)
如果你想使用 JSDOM 中未实现的一些 DOM 功能,只需按照官方文档模拟它们,例如
window.matchMedia = jest.fn().mockImplementation(query => {
return {
matches: false,
media: query,
onchange: null,
addListener: jest.fn(),
removeListener: jest.fn(),
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17997 次 |
| 最近记录: |