你如何使用Jasmine测试jquery点击功能,看看它是否称为自定义方法?

时间:2011-06-28 22:56:56

标签: jquery unit-testing jasmine

我正在编写Jasmine测试,以确定function click()方法调用了JQuery。我的逻辑在哪里不正确?我是否监视jquery函数或自定义函数?

我收到的错误是:

-error

Expected a spy, but got undefined. in http://localhost:8080/...etc.../jasmine.js (line 1253)

-code

describe("funtionCalled", function() {
it("calls the click() function", function() {
    var cc = new CustomClass();
    spyOn($.fn, "click");
    $( '#fieldID' ).click();
    expect(cc.clickFunction()).toHaveBeenCalled();
   });
});

- 正在测试的代码

var CustomClass = function(){};

$(document).ready(function(){
    var cf = new CustomClass();

    $( '#fieldID' ).click(function() {  
        cf.clickFunction();
    });
});

CustomClass.prototype.clickFunction = function() {
     //some javascript code
};

2 个答案:

答案 0 :(得分:6)

据我所知,这里有两件事是错的。首先你监视一个错误的对象,然后将clickFunction方法的结果传递给expect,而不是实际的方法。

试试这个:

describe("funtionCalled", function() {
    it("calls the click() function", function() {
        var cc = new CustomClass();

        spyOn(cc, "clickFunction"); 
        // Notice how you pass a real object and a method name to spyOn

        $('#fieldID').click();

        expect(cc.clickFunction).toHaveBeenCalled();
        // Notice how you pass the method, and not the method call result
    });
});

您可以在jasmine wiki中找到有关间谍的更多信息。

答案 1 :(得分:1)

您可能缺少jasmine-sinon助手,请参阅https://github.com/froots/jasmine-sinon