React Jest 测试无法读取未定义的属性“路径名”

Posted

技术标签:

【中文标题】React Jest 测试无法读取未定义的属性“路径名”【英文标题】:React Jest test Cannot read property 'pathname' of undefined 【发布时间】:2017-12-30 11:17:47 【问题描述】:

不知道为什么在我的简单 Main.test 文件中出现此错误。

Main.js的构造函数

export class Main extends Component 
    constructor(props) 
        super(props);

        this.state = 
            location: splitString(props.location.pathname, '/dashboard/')
        

        if (R.isEmpty(props.view)) 
            isViewServices(this.state.location)
                ? this.props.gotoServicesView()
                : this.props.gotoUsersView()
        
    

Main.test

import React from 'react'
import * as enzyme from 'enzyme'
import toJson from 'enzyme-to-json'
import  Main  from './Main'
import Sidebar from '../../components/Common/sidebar'

const main = enzyme.shallow(<Main />);

describe('<Main /> component', () => 

  it('should render', () => 
    const tree = toJson(main);
    expect(tree).toMatchSnapshot();
  );

  it('contains the Sidebar', () => 
    expect(main.find(Sidebar).length).toBe(1);
  );
);

有没有办法模拟“路径名”?

【问题讨论】:

【参考方案1】:

看来你可能有一些错误是在你的测试中你没有通过任何道具。

另一个来自您的构造函数中访问this.props

请参阅您的 if 声明,但我会在此处明确修复

if (R.isEmpty(props.view)) 
   isViewServices(this.state.location)
     ? props.gotoServicesView()
     : props.gotoUsersView()


在 Main.test 中

const location =  pathname: '/dashboard/' ;
const main = enzyme.shallow(<Main location= location />);

【讨论】:

啊,知道了。我需要在我的 Main.test 中创建一个假对象,对吗?称为 props 的对象,包含 location.pathname? @LeonGaban,是的,该组件可能使用的任何属性。

以上是关于React Jest 测试无法读取未定义的属性“路径名”的主要内容,如果未能解决你的问题,请参考以下文章

为啥这些 Jest 测试失败了? TypeError:无法读取未定义的属性“应用”

测试套件无法运行 TypeError:无法读取未定义的属性“默认”

笑话:TypeError:无法读取未定义的属性

TypeError:无法读取未定义的属性“viewManagersNames” - 将 Jest 和 Enzyme 与 React Native TypeScript 包集成

使用 Jest 进行测试 - TypeError:无法读取未定义的属性“forEach”

错误:未捕获 [TypeError:无法读取未定义 Jest 反应测试的属性“x”