我对使用Jasmine的Javascript UnitTesting相当新。所以我不知道如何模拟jQuery Submit()。我的所有其他函数都使用相同的实现正常工作,但即使使用SpyOn,仍然会执行.submit()。
我需要测试的代码是:
submitQuery: function(query) {
BoseSiteSearch._setQueryTextField(query);
if (BoseSiteSearch.isMobile) {
$('#searchbox').submit();
} else {
$('#siteSearchForm').submit();
}
return false;
}
我的测试代码:
describe("submitQuery", function () {
it('should submit the search query for desktop"',function(){
loadFixtures('JavaScript-V2/Functions/Bose.SiteSearch.specs.html');
var query = 'testValue';
spyOn(BoseSiteSearch,'_setQueryTextField');
spyOn($('#siteSearchForm'),'submit');
BoseSiteSearch.submitQuery(query);
expect(BoseSiteSearch._setQueryTextField).toHaveBeenCalled();
expect($('#siteSearchForm').submit).toHaveBeenCalled();
});
});
解决
it('should submit the search query for desktop"',function(){
loadFixtures('JavaScript-V2/Functions/Bose.SiteSearch.specs.html');
var query = 'testValue';
// MOCK THE SUBMIT
$.fn.submit = function(){}
spyOn(BoseSiteSearch,'_setQueryTextField');
spyOn( $.fn,'submit');
BoseSiteSearch.submitQuery(query);
expect(BoseSiteSearch._setQueryTextField).toHaveBeenCalled();
expect( $.fn.submit).toHaveBeenCalled();
});
答案 0 :(得分:1)
我可能应该将此添加为具有类似问题的未来用户的答案。
你没有编写集成测试,也不想单元测试提交自己,jQuery开发人员已经测试过提交工作。
因此,您可以模拟类似于:
的依赖项$.submit = function(){};
// or
$.fn.submit = function(){};
然后,当你的测试中触发submit
时,你的模拟被调用,你的测试应该能够断言结果。