[英]How to test the number of components that are rendered with a div (react-testing-library)?
I have this test file我有这个测试文件
import React from "react";
import { render } from "@testing-library/react";
import ParentComment from "../components/ParentComment";
describe("ParentComment", () => {
const comment = {
id: "4b2d74e6-7d1a-4ba3-9e95-0f52ee8ebc6e",
author: "Reed Fisher",
body: "Sint in in sunt amet.",
postedAt: 1550488214207,
replies_count: 3,
replies: [
{
id: "116dbd01-d5f3-4dfb-afeb-f822a9264a5e",
comment_id: "4b2d74e6-7d1a-4ba3-9e95-0f52ee8ebc6e",
author: "Kathleen Nikolaus",
body:
"Officia suscipit sint sint impedit nemo. Labore aut et quia quasi ut. Eos voluptatibus quidem eius delectus beatae excepturi.",
postedAt: 1550419941546,
},
{
id: "116dbd01-d643-4dfb-afeb-f822a9264a5e",
comment_id: "4b2d74e6-7d1a-4ba3-9e95-0f52ee8ebc6e",
author: "Kathleen Nikolaus",
body:
"Offici sint sint impedit nemo. Labore aut et quia quasi ut. Eos voluptatibus quidem eius delectus beatae excepturi.",
postedAt: 1550419941546,
},
],
};
let component;
beforeEach(() => {
component = render(<ParentComment comment={comment} />);
});
it("has a class parent-comment", () => {
expect(
component.container.querySelector(".parent-comment")
).toBeInTheDocument();
});
it("renders replies for comment", () => {
let comments = component.getAllByTestId("comment");
expect(comments.length).toBe(comment.replies.length + 1);
});
});
And following matching component:以及以下匹配组件:
import React from "react";
import Comment from "./Comment";
const ParentComment = (props) => {
const replies = props.comment.replies.map((reply) => (
<Comment key={reply.id} comment={reply} />
));
const handleShowMoreReplies = (e) => {
e.preventDefault();
props.onShowMoreReplies(props.comment.id);
};
return (
<div className="parent-comment">
<Comment comment={props.comment} />
<div className="replies">
{replies}
{props.comment.replies_count !== replies.length ? (
<a href="#" className="show_more" onClick={handleShowMoreReplies}>
Show More Replies ({props.comment.replies_count - 1})
</a>
) : null}
</div>
</div>
);
};
export default ParentComment;
What I want to test is the number of comments inside of the replies div, so, I did comment.replies.length + 1
as there is only 1 instance of Comment component outside of the replies
div, but this is not really a good way, as I could add easily break my test if I add another Comment
component outside of this div.我想测试的是回复 div 内的评论数量,所以,我做了comment.replies.length + 1
因为replies
div 之外只有 1 个 Comment 组件实例,但这并不是一个好方法,因为如果我在此 div 之外添加另一个Comment
组件,我可以很容易地破坏我的测试。
I suppose there is a better way?我想有更好的方法吗?
I've just realized that there is a within
helper.我刚刚意识到有一个within
帮手。
it("renders replies for comment", () => {
const { getAllByTestId } = within(
component.container.querySelector(".replies")
);
let comments = getAllByTestId("comment");
expect(comments.length).toBe(comment.replies.length);
});
The above test passes now.上面的测试现在通过了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.