gpt4 book ai didi

jestjs - React-Testing-Library - 在 fireEvent 之后拍摄快照

转载 作者:行者123 更新时间:2023-12-02 00:19:19 27 4
gpt4 key购买 nike

我在 fireEvent.focus() 之后拍摄快照时遇到问题被称为。

这是测试。我在这里有两个测试,第一个是比较输入聚焦之前的快照,另一个是比较输入聚焦之后的快照。

describe("Unit: <OutlinedInput />", (): void => {

describe("Initial render", (): void => {
describe("renders as snapshot", (): void => {
it("for standard fields", (): void => {
const { asFragment } = render(<OutlinedInput {...standardProps} />, {});
expect(asFragment()).toMatchSnapshot();
});
});
});

describe("On focus in, no input", (): void => {
describe("renders as snapshot", (): void => {
it("for standard fields", (): void => {
const { getByLabelText, container, asFragment } = render(
<OutlinedInput {...standardProps} />,
{}
);
const input = getByLabelText(standardProps.label);
fireEvent.focus(input);
waitForDomChange(container)
.then(
(): void => {
expect(asFragment()).toMatchSnapshot();
}
)
.catch((error: Error): void => console.log(error.message));
});
});
});
});

但是当我检查快照时,只创建了 1 个:

exports[`Unit: <OutlinedInput /> Initial render renders as snapshot for standard fields 1`] = `
<DocumentFragment>
<div
class="MuiFormControl-root MuiFormControl-marginDense MuiFormControl-fullWidth"
data-testid="outlinedInputFormControl"
>
<label
class="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-marginDense MuiInputLabel-outlined"
data-shrink="false"
data-testid="outlinedInputLabel"
for="name"
>
Name Label
</label>
<div
class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-formControl MuiInputBase-marginDense"
data-testid="outlinedInputInput"
>
<fieldset
aria-hidden="true"
class="PrivateNotchedOutline-root-62 MuiOutlinedInput-notchedOutline makeStyles-notchedOutline-6"
style="padding-left: 8px;"
>
<legend
class="PrivateNotchedOutline-legend-63"
style="width: 0.01px;"
>
<span>

</span>
</legend>
</fieldset>
<input
aria-invalid="false"
class="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputMarginDense MuiOutlinedInput-inputMarginDense"
id="name"
type="string"
value=""
/>
</div>
</div>
</DocumentFragment>
`;

似乎asFragment是在组件的初始渲染期间创建的,并且不会被 fireEvent.focus(input) 更新.这导致两个快照完全相同,我猜 React-Testing-Library 仅因此创建了 1 个快照。

应该会创建 2 个快照。第二个测试(有 fireEvent.focus(input) )应该为不同的组件提供不同的类。例如,<label>元素应该有一个额外的类 Mui-Focused ,我可以看到当我在浏览器中运行我的应用程序时会发生什么。

我该如何解决这个问题?

最佳答案

我让它工作了。显然,您不应该在比较快照之前等待 DOM 更新。

这是所做的更改:

  describe("On focus in, no input", (): void => {
describe("renders as snapshot", (): void => {
it("for standard fields", (): void => {
const { getByLabelText, asFragment } = render(
<OutlinedInput {...standardProps} />,
{}
);
const input = getByLabelText(standardProps.label);
fireEvent.focus(input);
expect(asFragment()).toMatchSnapshot();
});
});
});

关于jestjs - React-Testing-Library - 在 fireEvent 之后拍摄快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56021640/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com