I have a function which sets a language in cookie and gets it for some functionality. How do I set the value of language correctly for testing in 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'
}
Now I want to test it in 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
})
Don't have to download any deps, just use:
(
writable
needs to be set to true)When using the setFilesAfterEnv option in JEST, adding the following to the defined setup file works pretty well.
Enables normal cookie handling without any mocking.
I tried this and it worked:
If you want to return different values each time you call
Cookies.get()
, you can do this:The below code helped with mocking set/get for cookies for all types of tests in Jest:
You need to mock
js-cookie
using jest to set the language set you want.Or if you only need to set it once
Note that this solution would always return 'fr' for all
Cookie.get
calls. If you need support multiple values on get you could do something like this: