如何在下面的场景中使用Jasmine模拟window.location.href

时间:2017-05-10 08:20:08

标签: javascript unit-testing jasmine window.location

我有以下测试方法。

Item.prototype.getItemID = function() {
  try {

    var url = window.location.href.toLowerCase();

    var queryString = 'advertid';

    queryString = queryString.replace(/[\[\]]/g, "\\$&");

    var regex = new RegExp("[?&]" + queryString + "(=([^&#]*)|&|#|$)");

    var results = regex.exec(url);

    if (!results)

      return null;

    if (!results[2])

      return '';

    return decodeURIComponent(results[2].replace(/\+/g, " "));

  } catch (Error) {

    console.log(Error.message);

    return null;

  }

};

我在下面写了Jasmine测试代码。

describe("Call getItemID to get querystring 'AdvertID' value", function() {

  var localContext = {

    "window": {

      location: {

        href: "https://server/sites/abc/def/pages/item.aspx?advertid=2"

      }

    }

  }

  it('Passes - if getItemID returns actual querystring value', function() {

    with(localContext) {

      expect(Item.prototype.getItemID()).toEqual(2);

    }

  });

});

仍然在调用getItemID()时,href组件会给出当前的url而不是我想要的东西。

请建议实现这一目标的方法。谢谢

0 个答案:

没有答案