document.cookie
is like a string, but it is not a string. To quote the example from the Mozilla doc:
document.cookie = "name=oeschger"; document.cookie = "favorite_food=tripe"; alert(document.cookie); // displays: name=oeschger;favorite_food=tripe
If you tried to make a mock cookie using only a string, you would not get the same results:
var mockCookie = ""; mockCookie = "name=oeschger"; mockCookie = "favorite_food=tripe"; alert(mockCookie); // displays: favorite_food=tripe
So, if you wanted to unit test a module that operates on the cookie, and if you wanted to use a mock cookie for those tests, could you? How?
JavaScript can also manipulate cookies using the cookie property of the Document object. JavaScript can read, create, modify, and delete the cookies that apply to the current web page.
The Cookie Store API is asynchronous, and therefore is allowed in service workers. Interacting with the cookies works the same way in document contexts and in service workers. // Works in documents and service workers.
Mock functions allow you to test the links between code by erasing the actual implementation of a function, capturing calls to the function (and the parameters passed in those calls), capturing instances of constructor functions when instantiated with new , and allowing test-time configuration of return values.
You cannot. By design, for security purpose, you can access only the cookies set by your site.
You could create an object with a cookie
setter and getter. Here is a very simple implementation:
var mock = { value_: '', get cookie() { return this.value_; }, set cookie(value) { this.value_ += value + ';'; } };
Might not work in all browsers though (especially IE). Update: It only works in browsers supporting ECMAScript 5!
More about getter and setters.
mock.cookie = "name=oeschger"; mock.cookie = "favorite_food=tripe"; alert(mock.cookie); // displays: name=oeschger;favorite_food=tripe;
DEMO
This implementation allows overwriting cookies, and adds document.clearCookies()
(function (document) { var cookies = {}; document.__defineGetter__('cookie', function () { var output = []; for (var cookieName in cookies) { output.push(cookieName + "=" + cookies[cookieName]); } return output.join(";"); }); document.__defineSetter__('cookie', function (s) { var indexOfSeparator = s.indexOf("="); var key = s.substr(0, indexOfSeparator); var value = s.substring(indexOfSeparator + 1); cookies[key] = value; return key + "=" + value; }); document.clearCookies = function () { cookies = {}; }; })(document);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With