Я только что начал использовать реагирующую библиотеку-тестирование, поэтому я предполагаю, что это в конечном итоге связано с ошибкой пользователя, но я вижу следующее поведение, которое не имеет смысла для меня.
Для следующего запуска теста в только что созданном приложении CRA с использованием jest-dom 3.0.0 и response-testing-library 5.4.4:
import React from "react";
import { render } from "react-testing-library";
import "jest-dom/extend-expect";
import Component from "./Component";
describe("Verify UI state based on jobs", () => {
it("mounts with no previous data", () => {
const { getByTestId } = render(<Component data={[]} />);
expect(getByTestId("refresh-button")).toBeDisabled();
});
it("mounts with previous data", () => {
const { getByTestId } = render(<Component data={["hi"]} />);
expect(getByTestId("refresh-button")).not.toBeDisabled();
});
});
/*
const Component = props => {
return (
<div>
<button data-testid="refresh-button" disabled={props.data.length === 0}>
Refresh
</button>
</div>
);
};
*/
По сути, я получаю следующую ошибку:
Проверка состояния интерфейса на основе заданий ›монтируется с предыдущими данными
expect(element).not.toBeDisabled()
Received element is disabled:
<button data-testid="refresh-button" disabled="" />
13 | it("mounts with previous data", async () => {
14 | const { getByTestId } = render(<Component data={["hi"]} />);
> 15 | expect(getByTestId("refresh-button")).not.toBeDisabled();
| ^
16 | });
17 | });
18 |
at Object.toBeDisabled (src/Component.test.js:15:47)
Однако, если я отключаю первый тест, второй теперь проходит как надо. Если я переупорядочиваю вещи, первый тест всегда проходит, а второй всегда не проходит, даже если первый тест является тестом «монтирования с предыдущими данными».
Не уверен, если это проблема в библиотеке тестов, jest-dom или в моем коде, но любые советы о том, как правильно построить эти тесты, будут оценены.