reactjs - 我们如何访问和获取传递给组件的 props (wrapper.props().propname) 总是返回 undefined
问题描述
我正在使用酶测试列表组件我想测试我的组件是否呈现具有相同数据的列表,该数据传递给道具中的组件
import React from 'react';
import { shallow, mount } from 'enzyme';
import renderer from 'react-test-renderer';
import { MemoryRouter } from 'react-router';
import ListComponent from '.';
const listOfLinks = [
{ url: '/one', text: 'Link one', internal: false },
{ url: '/two', text: 'Link two', internal: false },
{ url: '/datasets', text: 'Datasets', internal: true }
];
const itemsToDisplay = 4;
const props = {
listOfLinks, itemsToDisplay
};
describe('list-Component', () => {
it('Check if rendered list size is same as passed', () => {
const wrapper = mount(<MemoryRouter><ListComponent {...props} /></MemoryRouter>);
expect(wrapper.props().listOfLinks.length).toEqual(3);
});
});
但我收到 了 3 个预期:未定义
解决方案
您的包装器是 a MemoryRouter
,而不是ListComponent
. MemoryRouter
没有道具。
如果你想检查传递给的道具ListComponent
,你可以这样做:
wrapper.find(ListComponent).props()
但是,顺便说一句……如果你这样做,你会测试什么?在这种情况下,您的测试正确地提供了预期的道具,但与组件本身无关。像这样检查道具是检查实现细节,而您应该对渲染输出感兴趣。最好在包装器中找到实际链接,然后计算它们。
eta:如果组件被更新为采用不同的道具(但具有相同的渲染结果),那么您的测试将失败,即使应用程序仍在按要求工作。如果您检查呈现的输出,那么您可以自由地重构和更新,并且您的测试只会在重要的东西失败时失败 - 即显示的链接数量不正确。Kent C Dodds写了很多关于这类东西的文章——查看他的React 测试库
推荐阅读
- python - 插入包含时间值的序列
- fullcalendar - Fullcalendar 未在 dayGrid 或周视图中正确显示事件
- python - 计算嵌套列表中的字符串
- jmeter - 如何在 http 请求采样器的正文中发送查询字符串?(发布请求)
- javascript - 如何使用指向新版本的 Webpacked JS 文件的 ASP.NET 管理发布?
- oracle - 单击按钮排序,如果再次按下,则顺序更改为 Oracle Forms 中的默认排序顺序
- asp.net-core - 如何在 ASP.NET Core GraphQL 中访问嵌套字段中的参数
- bash - 从命令行将元数据添加到 solr 中的 pdf
- django - 为什么 Django 不会渲染 pandas 中隐含的总和?
- python - 如何使用更新的值多次重复我的函数?