我正在使用jasmine编写javascript的测试用例但是当我在函数中创建spyOn并调用loginSubmit时,它会在该特定函数中给出错误“TypeError:e is 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 :(得分:0)
spyOn()
的第一个参数应该是包含要监视的函数的对象,第二个参数应该是字符串,表示要监视的函数的名称。这可以在Jasmine documentation中的示例规范文件中看到。
在您的情况下,如果您试图监视loginSubmit()
上的window.$.fn
功能,则应致电:
spyOn(window.$.fn, 'loginSubmit');
看一下你的代码,我不确定你是否需要window
的引用,所以你可以打电话:
spyOn($.fn, 'loginSubmit');
您当前看到的错误是因为您实际上是调用 loginSubmit()
函数,当您打算监视它时。此函数需要将一个参数传递给它,您在JavaScript代码中将其命名为e
。但是,由于测试会在没有任何参数的情况下调用loginSubmit()
,因此您的代码正在抱怨e is undefined
。