首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用酶与Jest测试材料-UI选择控制

用酶与Jest测试材料-UI选择控制
EN

Stack Overflow用户
提问于 2021-08-30 10:51:23
回答 2查看 1.5K关注 0票数 1

我有一个问题的测试材料-UI选择选项。在这里,我尝试测试所有选项都加载在控件中。但是,当我放置控制台日志调试时,它不会在options元素上显示任何内容。

此外,我已经注意到,菜单项呈现在页面底部的资料-UI。有什么特别的办法吗?下面是我试过的代码,

ColorSelect.jsx

代码语言:javascript
复制
    import React from 'react';
    import { FormControl, MenuItem, Avatar, TextField } from '@material-ui/core';
    import styled from "styled-components";

function ColorSelect(props) {
    return (
            <FormControl variant="outlined">
                <TextField
                    id="color-id-input"
                    select
                    value={props.color}
                    label={props.color == "" ? "Color" : ""}
                    InputLabelProps={{ shrink: false }}
                    variant="outlined"
                    error={props.error}
                    helperText={props.helpertext}
                >
                    <MenuItem style={{ fontSize: "13px" }} value="">
                        <em>None</em>
                    </MenuItem>
                    {
                        props.colors.map(color => (
                            <MenuItem key={"ColorNewLineMenuItem_" + color.colorCode} style={{ fontSize: "13px" }} value={color.colorCode}>
                                <div>
                                    <Avatar key={"ColorNewLineAvatar_" + color.colorCode} src={color.imageSrc} />
                                    <div>{color.name}</div>
                                </div>
                            </MenuItem>
                        ))
                    }
                </TextField>
            </FormControl>
        )
}

export default ColorSelect;

ColorSelect.test.js

代码语言:javascript
复制
import * as React from 'react';
import MockProvider from '../../mockProvider';
import * as data from '../../data/poData.json';
import { act } from '@testing-library/react';
import { mount } from "enzyme";

import ColorSelect from '../../../components/order/ColorSelect';

test("check colors dropdown loads correctly", async () => {

     wrapper = mount(<MockProvider><ColorSelect color="" colors={data.products[0].colors} /> 
               </MockProvider>);

     await act(async () => {
            wrapper.find({ 'id': "color-id-input" }).last().simulate("click")
        });

     wrapper.update();

     console.log(wrapper.debug()) // Can't see the menu items
}

mockProvider.js

代码语言:javascript
复制
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { Provider } from 'react-redux';

export default function MockProvider(props) {
    const mockStore = configureMockStore([thunk]);
    const store = mockStore({order: { status: 'SUCCEEDED', selectedPo: props.data, seletedProductIds: [], seletedLineItems: []}});
    return <Provider store={store}>{props.children}</Provider>;
}

我的poData.json是这样的,

代码语言:javascript
复制
{
    "id": "612a6a796cd84300df2f3263",
    "products": [
        {
            "poProductID": "612a6ac9bd6c2079cdaae9f1",
            "name": "AAAAA",
            "colors": [
                {
                    "colorCode": "1",
                    "name": "Pearl",
                    "imageSrc": "library/media-assets/2001/3001/3003.jpg"
                },
                {
                    "colorCode": "2",
                    "name": "Red",
                    "imageSrc": "/library/media-assets/2001/3009/3009.jpg"
                }
            ]
        }
    ]
}

这就是日志所显示的,

EN

回答 2

Stack Overflow用户

发布于 2021-09-05 06:07:33

你似乎在用酶混合和匹配反应测试库。我建议坚持两种方法中的一种。

尽管如此,您可以使用react测试库为您的控件编写测试,如下所示:

代码语言:javascript
复制
import { act, render, fireEvent, prettyDOM
} from '@testing-library/react';
//... other imports

test("check colors dropdown loads correctly", async () => {
  const wrapper = render(<ColorSelect color="" colors={data.products[0].colors}/>);

  await act(async () => {
    fireEvent.mouseDown(wrapper.getByRole("button"));
  });
  
  const options = await wrapper.getAllByRole('option');

  options.forEach(x => console.log(prettyDOM(x)));

});

控制material-ui中,您可以遵循它作为指南。

票数 2
EN

Stack Overflow用户

发布于 2021-09-06 03:22:35

如果你想坚持酶的话,你就得更具体一点

首先,选择将角色添加到find调用的按钮。

const button = wrapper.find({ id: "color-id-input", role: "button" });

然后模拟事件对象中的mousedown事件发送 ( button:0 )

button.simulate("mousedown", {button: 0});

这就是我拥有它的方式,在调试包装器时,我可以看到这些项。

代码语言:javascript
复制
test("check colors dropdown loads correctly", async () => {
  const wrapper = mount(
    <ColorSelect color="" colors={data.products[0].colors} />
  );

  const button = wrapper.find({ id: "color-id-input", role: "button" });
  button.simulate("mousedown", { button: 0 });

  wrapper.update();
  console.log(wrapper.debug()); // should see items
});

您可能希望切换到react测试库,在测试第三方库时,酶类是一种麻烦,有时需要知道实现细节(如本例中的“发送”按钮:0)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68982881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档