Kar*_*mar 0 reactjs react-redux react-testing-library
我正在关注 react-testing-library 的文档,以查找具有data-testid属性的元素是否已呈现。
react-testing-library 无法找到该元素,即使它存在。
测试
test('Renders step based on the active step', () => {
render(<RenderStep />, { initialState: { implOnboard: initialState } });
});
expect(screen.getByTestId('step-1')).toBeDefined(); // THROWS ERROR ?
}
Run Code Online (Sandbox Code Playgroud)
成分
// redux
const { activeStep } = useSelector((state) => state.implOnboard);
const renderStep = () => {
switch (activeStep) {
case 1:
console.log('Rendering this '); // THIS IS GETTING LOGGED TOO!
return (
<div data-testid="step-1">
<StepOne />
</div>
);
case 2:
return (
<div data-testid="step-2">
<StepTwo />
</div>
);
}
};
return <React.Fragment>{renderStep()}</React.Fragment>;
Run Code Online (Sandbox Code Playgroud)
错误
TestingLibraryElementError: Unable to find an element by: [data-testid="step-1"]
Run Code Online (Sandbox Code Playgroud)
Lui*_*ila 45
埃琳娜的答案是错误的,只是掩盖了错误。queryByTestId如果未找到该元素,using将返回 null,而不是在 using 时返回错误getByTestId,并且断言实际上是:
expect(null).toBeDefined();
Run Code Online (Sandbox Code Playgroud)
这一切都会过去的。这不是测试任何东西。toBeDefined()仅当该元素等于 undefined 时才会失败,并且其他所有元素都会通过。
如果OP想要实际检查该元素是否不存在,他们应该这样做:
expect(screen.queryByTestId('step-1')).not.toBeInTheDocument();
Run Code Online (Sandbox Code Playgroud)
OP 的原始错误可能是因为预期位于测试块之外而发生。
San*_*ath 22
添加到 Elena 的响应中,我们需要使用queryByTestIdbecause,如果未找到元素则queryByTestId返回null值,而不是像 那样抛出错误getByTestId。下面的图片解释了何时使用不同的方法。
有时即使使用此语句也会出错queryBy,因此请在该语句之前检查其他代码。
小智 7
请使用queryByTestId代替getByTestId。它会起作用。
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |