2016-03-18 17 views
0

我正在寫javascript測試用例使用茉莉花,但是當我創建spyOn函數和調用loginSubmit它給我錯誤「TypeError:e是undefined」在該特定功能。spyOn與javascript中的參數化函數。給我錯誤TypeError:e是undefined

我的測試代碼如下:

describe('this will test for html fixtures and login function called', function(){ 

    beforeEach(function() { 
     jasmine.getFixtures().fixturesPath = 'base/spec/javascripts/fixtures'; 
     loadFixtures('login.fixtures.html'); 
    }); 

    it('expect fixtures to exist', function() { 
     expect('form').toExist(); 
     expect('form').toContainElement('button'); 
    }); 
    spyOn(window, $.fn.loginSubmit()); 
    $('.submit').click(); 

    it('expect function to be called', function(){ 
     expect(loginSubmit).toBeCalled(); 
    }); 
    }); 

和Javascript代碼如下:

$.fn.loginSubmit = function(e) { 
    e.preventDefault(); 
    // my whole functionality 
    }; 

請告訴我,什麼是錯的這個代碼,並建議我,如果我做錯了什麼。我是測試前端JavaScript的新手。

回答

0

spyOn()的第一個參數應該是包含要窺探的函數的對象,而第二個參數應該是字符串,表示要窺探的函數的名稱。這可以在Jasmine documentation的示例spec文件中看到。

在你的情況,如果你想刺探上window.$.fnloginSubmit()功能,你應該叫:

spyOn(window.$.fn, 'loginSubmit'); 

你的代碼看,雖然,我不知道你所需要的參考window ,所以你可能只要致電:

spyOn($.fn, 'loginSubmit'); 

目前您所看到的錯誤是因爲你實際上是調用loginSubmit()功能當你的意思是要監視它。這個函數需要一個參數傳遞給它,你在JavaScript代碼中命名爲e。但是,由於該測試沒有任何參數調用loginSubmit(),因此您的代碼正確地抱怨e is undefined

+0

謝謝Nathan的回覆。實際上,loginSubmit函數在表單提交時被調用。那麼我如何將這個e(事件)傳遞給spyOn函數,這樣測試用例就可以工作,否則我會做其他的事情嗎? –

相關問題