Как издеваться над Cookie.get ('language') в JEST - PullRequest
0 голосов
/ 08 июня 2018

У меня есть функция, которая устанавливает язык в cookie и получает его для некоторых функций.Как правильно установить значение языка для тестирования в JEST

function resolveLanguage () {
  // browser cookie is checked to see if there is a value for language
  const lang = Cookie.get('language')

  // If no lang, it is defaulted to en 
  return lang || 'en'
}

Теперь я хочу проверить его в JEST

it('can resolve the language using a cookie', () => {
      Cookie.__defineGetter__("language", function() {
        return 'fr'
      })
      // console.log(Cookie.language) //returns fr
      // console.log(Cookie.get('language')) //returns fr
      expect(module.resolveLanguage()).toBe('fr') ---FAILS because it returns en
    })

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Приведенный ниже код помог с установкой / получением насмешек для файлов cookie для всех типов тестов в Jest:

Object.defineProperty(document, "doctype", {
 value: "<!DOCTYPE html>"
});
let setCookie = (v) => v;

Object.defineProperty(window.navigator, 'cookieEnabled', (function (_value) {
  return {
    get: function _get() {
      return _value;
    },
    set: function _set(v) {
    _value = v;
    },
    configurable: true
  };
})(window.navigator.cookieEnabled));

setCookie = (v) => v;

Object.defineProperty(window.document, 'cookie', (function (_value) {
  return {
    get: function _get() {
      return _value;
    },
    set: function _set(v) {
      _value = setCookie(v);
    },
    configurable: true
  };
})(window.navigator.cookieEnabled));
0 голосов
/ 16 августа 2018

Я попробовал это, и это сработало:

import Cookies from 'js-cookie';

Cookies.get = jest.fn()
    .mockImplementation(() => 'fr');

Если вы хотите возвращать разные значения каждый раз, когда вы вызываете Cookies.get(), вы можете сделать это:

Cookies.get = jest.fn()
    .mockImplementationOnce(() => 'en') // first time
    .mockImplementationOnce(() => 'de'); // second time
0 голосов
/ 23 августа 2018

Не нужно загружать никаких deps, просто используйте:

Object.defineProperty(window.document, 'cookie', {
            writable: true,
            value: 'myCookie=omnomnom',
        });

(writable должно быть установлено в true)

0 голосов
/ 08 июня 2018

Вам нужно смоделировать js-cookie, используя jest для установки желаемого языкового набора.

import Cookie from 'js-cookie'

jest.mock('js-cookie', ()=> jest.fn())

Cookie.setMockImplementation(()=>({get: () => 'fr'}))

Или если вам нужно установить его только один раз

jest.mock('js-cookie', ()=>({get: () => 'fr'}))

Обратите внимание, что этоРешение всегда будет возвращать 'fr' для всех Cookie.get вызовов.Если вам нужна поддержка нескольких значений на get, вы можете сделать что-то вроде этого:

jest.mock('js-cookie', ()=>({get: key => {
   language: 'fr', 
   somethingElse: 'someThing'
}[key]}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...