1

我正在尝试在我的测试中设置一个 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/>)
})

但是在我的 Logout 组件中,cookies 对象是空的:

export default function Logout() {
  const [cookies, setCookie, removeCookie] = useCookies(['authtoken'])
  console.log(cookies)
}

还有另一种方法可以做到这一点吗?最好是不将 cookie 作为道具传递的。

4

3 回答 3

1

所以问题出在@Oleg 和@Devin 所暗示的问题上。也渲染提供者。但我也必须像这样传递cookiesas 参数:

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>
  )
})
于 2019-10-13T17:24:16.363 回答
0

根据 react-cookie,您可以直接使用 DOM 访问 cookie。

 document.cookie.split(';').forEach(function(c) {
    document.cookie = c
      .replace(/^ +/, '')
      .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');
 });

这个功能是清除cookies。

我在之前的评论中想到的另一件事是,您可以通过“

const cookied = withCookies(<Login />)
render(cookied)

"

可以在以下位置找到此信息及其上下文的链接:https ://github.com/reactivestack/cookies/blob/master/packages/universal-cookie/src/utils.ts

于 2019-10-13T16:57:34.560 回答
0

通过添加

 const cookie = new Cookies();
 cookie.HAS_DOCUMENT_COOKIE = false;
于 2019-10-13T16:37:34.900 回答