spyOn在javascript中使用争论函数。给我错误TypeError:e未定义

时间:2016-03-18 07:15:12

标签: jquery jasmine

我正在使用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的新手。

1 个答案:

答案 0 :(得分:0)

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

在您的情况下,如果您试图监视loginSubmit()上的window.$.fn功能,则应致电:

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

看一下你的代码,我不确定你是否需要window的引用,所以你可以打电话:

spyOn($.fn, 'loginSubmit');

您当前看到的错误是因为您实际上是调用 loginSubmit()函数,当您打算监视它时。此函数需要将一个参数传递给它,您在JavaScript代码中将其命名为e。但是,由于测试会在没有任何参数的情况下调用loginSubmit(),因此您的代码正在抱怨e is undefined