React Jest测试报错:Cannot read properties of undefined (reading 'init')求助
解决Jest测试中TypeError: Cannot read properties of undefined (reading 'init')的问题
这个错误表明你的Project或Sample组件中,正在尝试调用某个未定义对象的init方法。以下是几种针对性的解决思路:
1. 模拟全局SDK对象
如果错误来自全局环境中的对象(比如window.someSDK.init()),在测试中手动模拟该对象:
在测试文件的describe块内添加:
beforeEach(() => { // 替换成实际的SDK名称 window.someSDK = { init: jest.fn() }; }); afterEach(() => { delete window.someSDK; });
2. 模拟第三方模块
如果组件导入了某个包含init方法的模块,用Jest mock该模块:
在测试文件顶部添加:
// 替换成实际的模块名 jest.mock('some-sdk', () => ({ init: jest.fn() }));
3. 检查ProviderProps是否缺失必要属性
确认传递给Project组件的providerProps包含所有必需的属性。如果组件期望某个带有init方法的对象作为prop,但你没有在providerProps中定义,就会触发这个错误。
4. 检查renderWrapper的配置
renderWrapper可能负责设置上下文或全局依赖。确认它是否正确模拟了组件所需的所有环境,比如是否遗漏了某个Provider或全局对象的初始化。
调整后的测试示例(假设是全局SDK的情况):
import React from 'react'; import { fireEvent, logRoles, screen } from '@testing-library/react'; import { renderWrapper } from '../../__utils__'; describe('TestingTab', () => { beforeEach(() => { // 模拟全局SDK的init方法 window.someSDK = { init: jest.fn() }; }); afterEach(() => { delete window.someSDK; }); it('renders Tab correctly', () => { const closeSpy = jest.spyOn(window, 'close').mockImplementation(() => {}); const providerProps = { setCurrentStep: jest.fn(), eligibleData: [{ Name: 'ABC', Role: 'XYZ', balance: 3694.9, Age: 18, paymentDue: 1000, isChecked: false, isEligible: false, }], setAccount: jest.fn(), continueNext: 'no', setNextTerms: jest.fn(), currentStep: 1, wizard: { next: jest.fn(() => true), previous: jest.fn(), }, }; renderWrapper( <Project {...providerProps}> <Sample /> </Project> ); logRoles(screen.getByRole('tabpanel')); // 可选,调整为实际的容器角色 const checkBoxElement = screen.getByRole('checkbox'); expect(checkBoxElement).toBeDisabled(); const closeButton = screen.getByRole('button', { name: /close/i }); // 更精确地定位按钮 expect(closeButton).toBeInTheDocument(); fireEvent.click(closeButton); expect(closeSpy).toHaveBeenCalledTimes(1); closeSpy.mockRestore(); }); });
内容的提问来源于stack exchange,提问作者Purva Parulekar
相关产品推荐
相关产品推荐

