Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在javascript中具有参数化函数的spyOn。给我错误类型错误:e未定义_Jquery_Jasmine - Fatal编程技术网

Jquery 在javascript中具有参数化函数的spyOn。给我错误类型错误:e未定义

Jquery 在javascript中具有参数化函数的spyOn。给我错误类型错误:e未定义,jquery,jasmine,Jquery,Jasmine,我正在使用jasmine为javascript编写测试用例,但当我为一个函数创建spyOn并调用loginSubmit时,它在该特定函数中给了我错误“TypeError:e未定义” 我的测试代码如下: describe('this will test for html fixtures and login function called', function (){ beforeEach(function() { jasmine.getFixtures().fixtu

我正在使用jasmine为javascript编写测试用例,但当我为一个函数创建spyOn并调用loginSubmit时,它在该特定函数中给了我错误“TypeError:e未定义”

我的测试代码如下:

 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的新手。

spyOn()的第一个参数应该是包含要监视的函数的对象,第二个参数应该是表示要监视的函数名称的字符串。这可以在中的示例等级库文件中看到

在您的情况下,如果您试图监视
窗口上的
loginSubmit()
函数。$.fn
,您应该调用:

spyOn(window.$.fn, 'loginSubmit');
但是,看看您的代码,我不确定您是否需要对
窗口的引用,因此您可以调用:

spyOn($.fn, 'loginSubmit');

您当前看到的错误是因为您实际上正在调用
loginSubmit()
函数来监视它。此函数需要向其传递一个参数,您在JavaScript代码中已将其命名为
e
。但是,由于测试调用了
loginSubmit()
,而没有任何参数,因此您的代码有理由抱怨
e未定义

,谢谢Nathan的回复。实际上,loginSubmit函数是在表单提交时调用的。那个么,我将如何在spyOn函数中传递e(事件),以便测试用例能够工作,或者我将做其他事情?