位置重新加载Jasmine

时间:2016-01-26 12:38:34

标签: javascript unit-testing jasmine

我在Jasmine中模拟了位置重新加载功能时遇到了问题。我尝试了几种方法(method 1method 2)来模拟任何位置重新加载事件,但没有运气。

我的情况如下。我有一个相当简单的功能:

function TestCall(xhr) {
   if (xhr === 401) {       
        location.reload();
   }
}

我尝试创建以下Jasmine测试:

it("FakeCall", function (){
    spyOn(TestCall, 'reload').and.callFake(function(){});
    TestCall(401);
    expect(TestCall).toHaveBeenCalled(); // this should check if reload functionality have been called 
}); 

我想模拟位置重新加载功能,但我不知道为什么这不起作用。任何人都可以指导/告诉我我做错了吗?

总代码:

describe("multiple scripts", function () {
    describe("2# FakeCall", function() {                            
        function TestCall(xhr) {            
            if (xhr === 401) {      
                location.reload();
            }
        }           

        it("2.1 # Reload", function (){                         
            spyOn(location, 'reload');
            TestCall(401);
            expect(location.reload).toHaveBeenCalled();                 
        }); 
    });  
});

1 个答案:

答案 0 :(得分:0)

当你使用spyOn时,你将object作为第一个参数,并将其方法的名称(它是该对象的属性)作为第二个参数。

因此,spyOn(TestCall, 'reload')使用此spyOn(location, 'reload')代替it("FakeCall", function (){ spyOn(location, 'reload'); TestCall(401); expect(location.reload).toHaveBeenCalled(); }); 。现在应该可以了。

在你的情况下,它可能看起来像这样

{{1}}