JavaScript单元测试:如何在单击函数中测试Jquery Submit()?

时间:2013-11-27 09:20:12

标签: javascript jquery unit-testing jasmine form-submit

我对使用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();

    });

1 个答案:

答案 0 :(得分:1)

我可能应该将此添加为具有类似问题的未来用户的答案。

你没有编写集成测试,也不想单元测试提交自己,jQuery开发人员已经测试过提交工作。

因此,您可以模拟类似于:

的依赖项
$.submit = function(){};

// or

$.fn.submit = function(){};

然后,当你的测试中触发submit时,你的模拟被调用,你的测试应该能够断言结果。