【发布时间】:2021-09-29 11:45:38
【问题描述】:
我需要编写一个测试,一旦权限 API 承诺得到解决,确保元素将不可见。
我已经基于the docs 编写了一个测试,但是它似乎只在元素最初存在时才有效。我的问题是元素('Test'字符串)不存在并且只要 userPermissions 不包含 requiredPermission 就不会存在,因此无论我是否通过正确的权限,测试都会通过。即使“测试”实际出现在页面上,测试expect(queryByText('Test')).not.toBeInTheDocument() 也通过了...
我想确定一个元素在我等待之后不会出现。
it('returns null if user does not have a permission', async () => {
fetch.mockResponse(JSON.stringify({ read: false }));
render(
<PermissionsProvider>
<HasPermission requiredPermission="read">Test</HasPermission>
</PermissionsProvider>
);
await waitFor(() => {
expect(queryByText('Test')).not.toBeInTheDocument()
});
});
这是HasPermission 组件
export const HasPermission = ({ children, requiredPermission }) => {
const { permissions: userPermissions } = useContext(PermissionsContext);
const match = userPermissions.some(permission => requiredPermission);
if (match) {
return <>{children}</>;
} else {
return null;
}
};
还有我的PermissionsProvider
const PermissionsContext = createContext(null);
export const PermissionsProvider = ({ children }) => {
const [permissions, setPermissions] = useState({});
useEffect(() => {
const fetchPermissions = async () => {
const response = await fetch('/permissions');
setPermissions(response);
};
fetchPermissions();
}, []);
return (
<PermissionsContext.Provider value={{ permissions }}>{children}</PermissionsContext.Provider>
);
};
【问题讨论】:
-
您确定获取的数据返回正确的信息吗?
标签: reactjs unit-testing jestjs react-testing-library