在react-cookie中模拟cookie

时间:2019-10-13 16:15:37

标签: reactjs react-cookie

我正在尝试在测试中设置一个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作为道具传递。

3 个答案:

答案 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>
  )
})