错误:当我在 React 中尝试使用 Jest 进行测试时,无法找到带有文本的元素
Posted
技术标签:
【中文标题】错误:当我在 React 中尝试使用 Jest 进行测试时,无法找到带有文本的元素【英文标题】:Error: Unable to find an element with the text when I try a test with Jest in React 【发布时间】:2020-04-10 12:00:33 【问题描述】:我是测试新闻,se,这是我的问题
我有那个简单的登录组件:
import React, useState from "react";
export default function Login()
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
function handleLogin(event)
event.preventDefault();
console.log(email, password);
return (
<form data-testid="login-form" onSubmit=handleLogin>
<input
data-testid="useremail"
type="email"
placeholder="Email"
value=email
onChange=event => setEmail(event.target.value)
/>
<input
data-testid="userpassword"
type="password"
placeholder="Password"
value=password
onChange=event => setPassword(event.target.value)
/>
<button onClick=handleLogin>login</button>
</form>
);
我在这里尝试测试:
import React from "react";
import Login from "../pages/Login";
import render, fireEvent from "@testing-library/react";
describe("Login component", () =>
it("user sent email and password", () =>
const username = "user@gmail.com";
const password = "123456";
let getByText, getByTestId = render(<Login />);
fireEvent.change(getByTestId("useremail"),
target: value: username
);
fireEvent.change(getByTestId("userpassword"),
target: value: password
);
fireEvent.submit(getByTestId("login-form"));
expect(getByTestId("login-form")).toContainElement(
getByText(username, password)
);
);
);
返回的错误: 无法找到包含以下文本的元素:user@gmail.com。这可能是因为文本被多个元素分解。在这种情况下,你可以为你的文本匹配器提供一个函数,让你的匹配器更加灵活。
【问题讨论】:
【参考方案1】:getByText
看起来像 by text content。 value
属性不是文本内容,而只是属性之一。所以它不会通过这种方法找到输入。
此外,根据您要断言的内容进行搜索也不是惯用的。最好通过它的静态属性找到元素,然后检查动态值:
expect(getByTestId("useremail").value).toEqual("user@gmail.com");
PS 为了更“RTL 方法”,我还建议使用 getByPlaceholderText
而不是 getByTestId
。
【讨论】:
谢谢你,现在我知道我犯错的地方了,你的解决方案效果很好以上是关于错误:当我在 React 中尝试使用 Jest 进行测试时,无法找到带有文本的元素的主要内容,如果未能解决你的问题,请参考以下文章
意外的导入令牌 - 使用 Jest 测试 React Native
React / Enzyme:运行 Jest / Enzyme 测试时出现 Invariant Violation 错误
如何模拟在使用 Jest 测试的 React 组件中进行的 API 调用
在 jest-react 中使用 MockedProvider 会导致错误“查询没有更多的模拟响应”