Издеваться над cookie-файлом - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь установить 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 объект cookie пуст:

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

Есть ли другой способ сделать это? Желательно тот, который не передает куки в качестве реквизита.

Ответы [ 3 ]

0 голосов
/ 13 октября 2019

Согласно куки-реакции, вы можете получить доступ к файлам cookie напрямую через DOM.

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

Эта функция предназначена для очистки файлов cookie.

Что-то еще, о чем я думал ранеекомментарий состоял в том, что вы рендерили компонент с файлами cookie через "

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

"

Ссылка на эту информацию и ее контекст могут быть найдены по адресу: https://github.com/reactivestack/cookies/blob/master/packages/universal-cookie/src/utils.ts

0 голосов
/ 13 октября 2019

Так что проблема была в том, на что намекали @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>
  )
})
0 голосов
/ 13 октября 2019

добавив

 const cookie = new Cookies();
 cookie.HAS_DOCUMENT_COOKIE = false;
...