空旷的测试需要200秒

发布于 2025-02-11 17:02:57 字数 9338 浏览 1 评论 0原文

我有两个测试套件。实际上,一个人打电话给API,并且似乎在20秒内运行。另一个实际上是空的,需要248秒。其中两个测试是托多(Todo),一个测试有一些我评论的实施。它仍然是永远的。为什么这是?

import { render, waitFor, screen }  from "@testing-library/react";
import MyContent from "./MyContent.js";

describe('MyContent Component', () => {
    it.todo('should call API when search button is clicked');

    it('should render some text when api responds',  () => {
        /*
        render(<MyContent />);
        await waitFor(() => {
            screen.getByText("some text");
        });
        */
    });

    it.todo('should render error message when api fails');
    
});

这是我在软件包内定义的Jest配置。JSON

  "jest": {
    "transform": {
      "^.+\\.[t|j]sx?$": "babel-jest"
    },
    "testEnvironment": "jsdom"
  },

我需要使用JSDOM,因为现有代码中有一个窗口。

更新:添加组件代码

import React, { useState } from "react";
import { Input } from "@progress/kendo-react-inputs";
import { Label } from "@progress/kendo-react-labels";
import * as Constants from "../common/Constants.js";
import SearchTextBox from "../../components/SearchTextbox/SearchTextbox.js";
import someService from "../../services/someService.js";
import { Update } from "@material-ui/icons";

function MyContent(props) {

    const isThatPage = props.pageIdentifier == Constants.PageIdentifier.thatPage;

    const [eDetailsOutput, seteDetailsOutput] = useState({
        a: null,
        b: null,
        c: null,
        d: null
    });

    const handleChange = (e) => {
        let dataToPush = [];
        dataToPush.push({ key: e.target.name, value: e.target.value });
        if (props.handleChange) {
            props.handleChange(dataToPush);
        }
    };

    const thatInput = {
        q: null,
        w: null,
        eId: null,
        x: null,
        z: props.z
    };

    const handleSearchClick = () => {
        someService.getthatDetailsBya(thatInput)
            .then((response) => {
                let updatedValue = {};
                updatedValue = {
                    a: response?.eDetails.a, 
                    b: response?.eDetails.b, 
                    c: response?.eDetails.c, 
                    d: response?.eDetails.d
                }

                seteDetailsOutput(eDetailsOutput => ({
                    ...eDetailsOutput,
                    ...updatedValue
                }));
            })
            .catch((error) => {
                goToAPIErrorPage(error?.message);
            });
    };

    return (
        <div className="k-form form_margin">
            <div className="k-geo-form">
                <div className="card">
                    <div className="card-item">
                        <div className="row">
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>el Name</Label>
                                {isThatPage ? (
                                    <SearchTextBox
                                        id="z-textbox"
                                        name="z"
                                        value={props.z ?? ""}
                                        handleChange={handleChange}
                                        readOnly={props.isReadOnly}
                                        handleSearchClick={handleSearchClick}
                                    />
                                ) : (
                                    <Input
                                        id="z-textbox"
                                        name="z"
                                        value={props.z ?? ""}
                                        onChange={handleChange}
                                        className={props.isReadOnly ? "readOnlyInput" : ""}
                                        readonly={props.isReadOnly}
                                    />
                                )}
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>a</Label>
                                {isThatPage ? (
                                    <SearchTextBox
                                        id="a-textbox"
                                        name="a"
                                        // value={props.a ?? ""}
                                        value={eDetailsOutput.a ?? "aIII"}
                                        handleChange={handleChange}
                                        readOnly={props.isReadOnly}
                                        handleSearchClick={handleSearchClick}
                                    />
                                ) : (
                                    <Input
                                        id="a-textbox"
                                        name="a"
                                        value={props.a ?? ""}
                                        onChange={handleChange}
                                        className={props.isReadOnly ? "readOnlyInput" : ""}
                                        readonly={props.isReadOnly}
                                    />
                                )}
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Entity Category Type</Label>
                                <Input
                                    id="b-textbox"
                                    name="b"
                                    // value={props.b ?? ""}
                                    value={eDetailsOutput.b ?? "beee"}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                        </div>
                        <div className="row">
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Status</Label>
                                <Input
                                    id="Status-textbox"
                                    name="Status"
                                    // value={props.Status ?? ""}
                                    value={eDetailsOutput.c ?? "csssss"}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Other Status</Label>
                                <Input
                                    id="OtherStatus-textbox"
                                    name="OtherStatus"
                                    value={props.OtherStatus ?? ""}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Some Role</Label>
                                <Input
                                    id="Role-textbox"
                                    name="Role"
                                    value={props.Role ?? ""}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                        </div>
                        <div className="row">
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Some Type</Label>
                                <Input
                                    id="Type-textbox"
                                    name="Type"
                                    value={eDetailsOutput.d ?? "deeeeee"}                                    
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    );
}
export default MyContent;

I have a two test suites. One actually makes API calls, and seems to run in about 20 seconds. Other one, is literally empty and takes over 248 seconds. Two of the tests are todo, and one had some implementation that I commented out. It's still taking forever. Why is this?

import { render, waitFor, screen }  from "@testing-library/react";
import MyContent from "./MyContent.js";

describe('MyContent Component', () => {
    it.todo('should call API when search button is clicked');

    it('should render some text when api responds',  () => {
        /*
        render(<MyContent />);
        await waitFor(() => {
            screen.getByText("some text");
        });
        */
    });

    it.todo('should render error message when api fails');
    
});

Here is my jest config defined inside package.json

  "jest": {
    "transform": {
      "^.+\\.[t|j]sx?
quot;: "babel-jest"
    },
    "testEnvironment": "jsdom"
  },

I need to use jsdom because there is a window.location in existing code.

Update: Adding component code

import React, { useState } from "react";
import { Input } from "@progress/kendo-react-inputs";
import { Label } from "@progress/kendo-react-labels";
import * as Constants from "../common/Constants.js";
import SearchTextBox from "../../components/SearchTextbox/SearchTextbox.js";
import someService from "../../services/someService.js";
import { Update } from "@material-ui/icons";

function MyContent(props) {

    const isThatPage = props.pageIdentifier == Constants.PageIdentifier.thatPage;

    const [eDetailsOutput, seteDetailsOutput] = useState({
        a: null,
        b: null,
        c: null,
        d: null
    });

    const handleChange = (e) => {
        let dataToPush = [];
        dataToPush.push({ key: e.target.name, value: e.target.value });
        if (props.handleChange) {
            props.handleChange(dataToPush);
        }
    };

    const thatInput = {
        q: null,
        w: null,
        eId: null,
        x: null,
        z: props.z
    };

    const handleSearchClick = () => {
        someService.getthatDetailsBya(thatInput)
            .then((response) => {
                let updatedValue = {};
                updatedValue = {
                    a: response?.eDetails.a, 
                    b: response?.eDetails.b, 
                    c: response?.eDetails.c, 
                    d: response?.eDetails.d
                }

                seteDetailsOutput(eDetailsOutput => ({
                    ...eDetailsOutput,
                    ...updatedValue
                }));
            })
            .catch((error) => {
                goToAPIErrorPage(error?.message);
            });
    };

    return (
        <div className="k-form form_margin">
            <div className="k-geo-form">
                <div className="card">
                    <div className="card-item">
                        <div className="row">
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>el Name</Label>
                                {isThatPage ? (
                                    <SearchTextBox
                                        id="z-textbox"
                                        name="z"
                                        value={props.z ?? ""}
                                        handleChange={handleChange}
                                        readOnly={props.isReadOnly}
                                        handleSearchClick={handleSearchClick}
                                    />
                                ) : (
                                    <Input
                                        id="z-textbox"
                                        name="z"
                                        value={props.z ?? ""}
                                        onChange={handleChange}
                                        className={props.isReadOnly ? "readOnlyInput" : ""}
                                        readonly={props.isReadOnly}
                                    />
                                )}
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>a</Label>
                                {isThatPage ? (
                                    <SearchTextBox
                                        id="a-textbox"
                                        name="a"
                                        // value={props.a ?? ""}
                                        value={eDetailsOutput.a ?? "aIII"}
                                        handleChange={handleChange}
                                        readOnly={props.isReadOnly}
                                        handleSearchClick={handleSearchClick}
                                    />
                                ) : (
                                    <Input
                                        id="a-textbox"
                                        name="a"
                                        value={props.a ?? ""}
                                        onChange={handleChange}
                                        className={props.isReadOnly ? "readOnlyInput" : ""}
                                        readonly={props.isReadOnly}
                                    />
                                )}
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Entity Category Type</Label>
                                <Input
                                    id="b-textbox"
                                    name="b"
                                    // value={props.b ?? ""}
                                    value={eDetailsOutput.b ?? "beee"}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                        </div>
                        <div className="row">
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Status</Label>
                                <Input
                                    id="Status-textbox"
                                    name="Status"
                                    // value={props.Status ?? ""}
                                    value={eDetailsOutput.c ?? "csssss"}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Other Status</Label>
                                <Input
                                    id="OtherStatus-textbox"
                                    name="OtherStatus"
                                    value={props.OtherStatus ?? ""}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Some Role</Label>
                                <Input
                                    id="Role-textbox"
                                    name="Role"
                                    value={props.Role ?? ""}
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                        </div>
                        <div className="row">
                            <div className="col-lg-4 col-md-4 col-sm-4 col-xs-4 form-group">
                                <Label>Some Type</Label>
                                <Input
                                    id="Type-textbox"
                                    name="Type"
                                    value={eDetailsOutput.d ?? "deeeeee"}                                    
                                    onChange={handleChange}
                                    className={props.isReadOnly ? "readOnlyInput" : ""}
                                    readonly={props.isReadOnly}
                                />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    );
}
export default MyContent;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文