我正在尝试在测试中设置一个cookie,以确保它已在我的组件中清除:
import Cookies from 'universal-cookie';
test('successfully logs the user out', async () => {
const cookie = new Cookies()
cookie.set('authtoken', 'some-token')
const { getByText } = render(<Logout/>)
})
但是在我的注销组件中,cookie对象为空:
export default function Logout() {
const [cookies, setCookie, removeCookie] = useCookies(['authtoken'])
console.log(cookies)
}
还有另一种方法吗?最好不要将cookie作为道具传递。
答案 0 :(得分:0)
通过添加
const cookie = new Cookies();
cookie.HAS_DOCUMENT_COOKIE = false;
答案 1 :(得分:0)
根据react-cookie,您可以直接使用DOM访问Cookie。
document.cookie.split(';').forEach(function(c) {
document.cookie = c
.replace(/^ +/, '')
.replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');
});
此功能是清除cookie。
我在较早的评论中想的另一件事是,您通过“
const cookied = withCookies(<Login />)
render(cookied)
”
此信息及其上下文的链接可以在https://github.com/reactivestack/cookies/blob/master/packages/universal-cookie/src/utils.ts
中找到答案 2 :(得分:0)
所以问题出在@Oleg和@Devin暗示了什么。还要渲染提供程序。但是我还必须像这样传递cookies
作为参数:
import Cookies from 'universal-cookie';
test('successfully logs the user out', async () => {
const cookie = new Cookies({authtoken: 'some-token'});
const { getByText } = render(
<CookiesProvider cookies={cookie}>
<Router>
<Logout/>
</Router>
</CookiesProvider>
)
})