Javascript 当值为null时调用函数的Jasmine测试

Javascript 当值为null时调用函数的Jasmine测试,javascript,unit-testing,jasmine,Javascript,Unit Testing,Jasmine,我有一个返回上一页的函数。这很好,我想在jasmine中测试它,但当值为null时,我无法让clickReturnToPage测试通过 var ReturntoPage = { returnTo: function(fromPageObject){ $('.btnholder').append('<input class="returnTo" type="button" value="Return to Page" />'); Returnt

我有一个返回上一页的函数。这很好,我想在jasmine中测试它,但当值为null时,我无法让clickReturnToPage测试通过

var ReturntoPage = {

    returnTo: function(fromPageObject){
        $('.btnholder').append('<input class="returnTo" type="button" value="Return to Page" />');
        ReturntoPage.clickReturntoPage();
    },

    disableReturnButton: function (disableFlag) {
        (disableFlag == true) ? $('.returnTo').addClass('disabledButton') : $('.returnTo').removeClass('disabledButton');
        $('.returnTo').prop('disabled', disableFlag);
    },

    clickReturnToPage: function(){
        var lastSearch = sessionStorage.getItem('prev');
        if(lastSearch != null){
            ReturntoPage.disableReturnButton(false);
        }else{
            ReturntoPage.disableReturnButton(true);
        }

        $(".returnTo").bind("click", function() {
            ReturntoPage.redirect();
        });
    },

    redirect:function(){
         lastSearch = sessionStorage.getItem('lastSearch');
         // got to that page
    },
};
var ReturntoPage={
返回到:函数(fromPageObject){
$('.btnholder')。追加('');
ReturntoPage。单击ReturntoPage();
},
disableReturnButton:功能(disableFlag){
(disableFlag==true)?$('.returnTo').addClass('disabledButton'):$('.returnTo').removeClass('disabledButton');
$('.returnTo').prop('disabled',disableFlag);
},
单击返回页面:函数(){
var lastSearch=sessionStorage.getItem('prev');
if(lastSearch!=null){
ReturntoPage.disableReturnButton(假);
}否则{
ReturntoPage.disableReturnButton(真);
}
$(“.returnTo”).bind(“单击”,函数(){
ReturntoPage.redirect();
});
},
重定向:函数(){
lastSearch=sessionStorage.getItem('lastSearch');
//到那一页了
},
};
这是我正在运行的测试

describe("Return to page", function () {

    beforeEach(function () {
        setFixtures('<input class="returnTo" type="button" value="Return to Page" />');
    });

    it("should send false to disableReturnButton when last search is not null", function () {
        lastSearch = "aa";  
        spyOn(ReturntoPage, 'disableReturnButton');

        ReturntoPage.clickReturnToPage();
       // console.log("lastSearch = " + lastSearch);
        expect(ReturntoPage.disableReturnButton).toHaveBeenCalledWith(false);
    });

    it("should send true to disableReturnButton when when last search is null ", function () {
        lastSearch = null;
        spyOn(ReturntoPage, 'disableReturnButton');

        ReturntoPage.clickReturnToPage();
        //console.log("lastSearch = " + lastSearch);
        expect(ReturntoPage.disableReturnButton).toHaveBeenCalledWith(true);
    });


});
描述(“返回页面”,函数(){
beforeach(函数(){
固定装置(“”);
});
它(“当上次搜索不为空时,应向disableReturnButton发送false”,函数(){
lastSearch=“aa”;
spyOn(返回页面,“禁用返回按钮”);
ReturntoPage。单击ReturntoPage();
//console.log(“lastSearch=“+lastSearch”);
期望(ReturntoPage.disableReturnButton).已被调用(false);
});
它(“当上次搜索为空时,应将true发送到disableReturnButton”,函数(){
lastSearch=null;
spyOn(返回页面,“禁用返回按钮”);
ReturntoPage。单击ReturntoPage();
//console.log(“lastSearch=“+lastSearch”);
期望(ReturntoPage.disableReturnButton).已被调用(true);
});
});

您不能覆盖函数中声明的变量,因此
lastSearch=“aa”
将对您要测试的函数无效。由于
lastSearch
来自
sessionStorage
,因此您必须监视它并返回
“aa”
null

it("should send true to disableReturnButton when when last search is null ", function () {
    if(typeof sessionStorage === 'undefined'){
      sessionStorage = {getItem: jasmine.createSpy().andReturn(null)}
    }else{
      spyOn(sessionStorage, 'getItem').andReturn(null);          
    }
    spyOn(ReturntoPage, 'disableReturnButton');

    ReturntoPage.clickReturnToPage();
    //console.log("lastSearch = " + lastSearch);
    expect(ReturntoPage.disableReturnButton).toHaveBeenCalledWith(true);
});

成功了!谢谢你的解释。我对jasmine和junit是新手,我花了一段时间才理解它!它只在eclipse的JSTD中起作用。当我使用maven运行它时,我得到一个错误,即sessionStorage.getItem不是maven中的函数,maven在不支持本地存储的环境中运行测试。更新了我的答案。嗯,再次更新我的答案。您知道测试在哪个环境下运行吗?windows 7和firefox 10