Is it possible to mock [removed] in JavaScript?

后端 未结 6 524
猫巷女王i
猫巷女王i 2020-12-14 07:39

document.cookie is like a string, but it is not a string. To quote the example from the Mozilla doc:

document.cookie = \"name=oeschger\";
docume         


        
6条回答
  •  醉梦人生
    2020-12-14 08:22

    Personally i was unable to hijack the document object. A simple solution which seems to work for me was the following...

    At the top of my test script i define a fakeCookie object:

    var fakeCookie = {
        cookies: [],
        set: function (k, v) {
            this.cookies[k] = v;
        },
        get: function (k) {
            return this.cookies[k];
        },
        reset: function () {
            this.cookies = [];
        }
    };
    

    Then in my beforeEach() i define my cookie stub. This basically intercepts calls to jQuery.cookie and (instead!) call the callback function that i have defined (see below):

    beforeEach(function() {
        var cookieStub = sinon.stub(jQuery, "cookie", function() {
            if (arguments.length > 1) {
                fakeCookie.set(arguments[0], arguments[1]);
            }
            else {
                return fakeCookie.get(arguments[0]);
            }
        });
    });
    

    Any time that i get or set a cookie value it uses my fakeCookie instead of the real jQuery.cookie. It does this by looking at the number of parameters passed and deduces whether its a get/set. I literally pasted this in and it all worked straight off the bat. Hope this helps!!

提交回复
热议问题