Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 我们如何访问和获取传递给组件的道具(wrapper.props().propname)总是返回未定义的_Reactjs_Enzyme - Fatal编程技术网

Reactjs 我们如何访问和获取传递给组件的道具(wrapper.props().propname)总是返回未定义的

Reactjs 我们如何访问和获取传递给组件的道具(wrapper.props().propname)总是返回未定义的,reactjs,enzyme,Reactjs,Enzyme,我正在用酵素测试一个列表组件,我想测试我的组件是否呈现了一个列表,该列表中的数据与在props中传递给组件的数据相同 import React from 'react'; import { shallow, mount } from 'enzyme'; import renderer from 'react-test-renderer'; import { MemoryRouter } from 'react-router'; import ListComponent from '.'; c

我正在用酵素测试一个列表组件,我想测试我的组件是否呈现了一个列表,该列表中的数据与在props中传递给组件的数据相同

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);
    });
});
从“React”导入React;
从“酶”导入{shall,mount};
从“反应测试渲染器”导入渲染器;
从“react路由器”导入{MemoryRouter};
从“”导入ListComponent;
常量列表链接=[
{url:'/one',文本:'linkone',内部:false},
{url:'/two',文本:'Link two',内部:false},
{url:'/datasets',文本:'datasets',内部:true}
];
const itemsToDisplay=4;
常量道具={
ListofLink、itemsToDisplay
};
描述('列表组件',()=>{
它('检查呈现的列表大小是否与传递的相同',()=>{
const wrapper=mount();
expect(wrapper.props().listOfLinks.length).toEqual(3);
});
});
但我明白了
预期收到3个:未定义

此处的包装器是一个
MemoryRouter
,而不是
列表组件
MemoryRouter
没有道具

如果要检查传递给
ListComponent
的道具,可以这样做:

wrapper.find(ListComponent).props() 
然而,作为旁白。。。如果你那样做了,你会测试什么?在本例中,可能是您的测试正确地提供了预期的道具,而与组件本身无关。检查这样的道具就是检查实现细节,而您应该感兴趣的是渲染输出。最好在包装器中找到实际的链接,然后对它们进行计数


eta:如果组件被更新为使用不同的道具(但呈现的结果相同),则测试将失败,即使应用程序仍按要求工作。如果您检查呈现的输出,那么您可以自由地重构和更新,并且只有当重要内容失败时,您的测试才会失败,即显示的链接数量不正确。写了很多关于这类东西的东西-看看他的

你的包装器这里是一个
内存计算器
,而不是
列表组件
MemoryRouter
没有道具

如果要检查传递给
ListComponent
的道具,可以这样做:

wrapper.find(ListComponent).props() 
然而,作为旁白。。。如果你那样做了,你会测试什么?在本例中,可能是您的测试正确地提供了预期的道具,而与组件本身无关。检查这样的道具就是检查实现细节,而您应该感兴趣的是渲染输出。最好在包装器中找到实际的链接,然后对它们进行计数


eta:如果组件被更新为使用不同的道具(但呈现的结果相同),则测试将失败,即使应用程序仍按要求工作。如果您检查呈现的输出,那么您可以自由地重构和更新,并且只有当重要内容失败时,您的测试才会失败,即显示的链接数量不正确。写了很多关于这类东西的东西-看看他的

嗨,威尔,我很感谢你的回答,你是关于包装的,事实上我对酶和反应很陌生,如果你能帮我找到一种方法来访问属性传递到ListComponent,那就太好了。或者,如果你能详细阐述一下你建议的其他方法,那就不用担心了。。。我已经更新了我的答案,并提供了更多信息,希望能有所帮助。谢谢@will,这非常有帮助。hi will,我感谢你的回答,你是rite关于包装的,事实上我对酶和反应还不熟悉,如果你能帮我找到一种方法来访问属性传递到ListComponent,那就太好了。或者,如果你能详细阐述一下你建议的其他方法,那就不用担心了。。。我已经更新了我的答案,希望有帮助。谢谢@will,这很有帮助