如何在Jasmine中测试window.location

时间:2016-01-05 08:32:23

标签: javascript backbone.js jasmine

在我使用骨干的应用程序中,我有以下功能:

  handleModelSaved: function () {
    var redirect_location = 'redirect_path';

    App.Messenger.success('Report was saved successfully!');
    setTimeout(function () {
      window.location = redirect_location;
    }, 2000);
  }

现在我有以下测试:

  describe('handleModelSaved', function () {
    beforeEach(function () {
      view = initV3View();
      spyOn(App.Messenger, 'success');
      view.handleModelSaved();
    });

    it("sends a success message", function () {
      expect(App.Messenger.success).toHaveBeenCalledWith('Report was saved successfully!');
    });
  }); 

我的问题是,如何用Jasmine测试这段代码:

setTimeout(function () {
  window.location = redirect_location;
}, 2000);

1 个答案:

答案 0 :(得分:0)

您只需检查窗口对象上的location属性即可获得特定值。当然,只有在超时到期后才能执行此操作。您可能想要做的是使用您自己的实现覆盖setTimeout函数,该实现立即调用指定的回调函数。这样你还可以检查是否使用预期的超时调用了setTimeout。您可以自己执行此操作,也可以使用Jasmine的Clock函数来模拟本机超时函数:http://jasmine.github.io/2.0/introduction.html

另一种选择是使用作为参数传递给it()函数回调的done函数。这使得测试异步。