Javascript 当值为null时调用函数的Jasmine测试
我有一个返回上一页的函数。这很好,我想在jasmine中测试它,但当值为null时,我无法让clickReturnToPage测试通过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
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