jasmine和jquery-ui - effect()方法不存在

时间:2011-01-13 02:37:34

标签: jquery jquery-ui jasmine

这很简单。我的JS只是打电话:

$("#search_box").focus().effect("highlight",{},3000);

    describe('initialization', function(){
        beforeEach(function(){
            var search_box = $("#search_box");
        });

        it('should initially focus on the search box', function(){
            spyOn(search_box, 'focus');
            wizard._initialize();
            expect(search_box.focus).toHaveBeenCalled();
        });

        it('should initially highlight the search box', function(){
            spyOn(search_box, 'effect');
            wizard._initialize();
            expect(search_box.effect).toHaveBeenCalledWith("highlight", {}, 3000);
        });

    });

focus()有效,但效果不起作用。它说效果()方法不存在,好像我没有加载jquery-ui库。

我已将jquery-ui添加到我的jasmine.yml文件中,并已验证它是由跑步者加载的。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我有类似的问题。我通过从应用程序的jasmine.yml文件中删除这一行来完成工作:

- public/javascripts/**/*.js

我明确地改变了要明确包含每个js文件的东西。我想人们应该小心使用通配符。

希望它有所帮助,

- 何塞

答案 1 :(得分:0)

如果将来有人需要这个答案:

你无法监视这样的效果方法:

spyOn(search_box, 'effect');

你应该监视这样的效果方法:

spyOn($.fn, 'effect');

答案 2 :(得分:0)

我认为你需要在beforeEach函数之外移动search_box的声明。

变化:

describe('initialization', function(){
    beforeEach(function(){
        var search_box = $("#search_box");
    });
});

要:

describe('initialization', function(){
    var search_box;
    beforeEach(function(){
        search_box = $("#search_box");
    });
});

如果您使用过“use strict”;调试器可能已经指出了这一点。这就是说,使用JQuery和jasmine spys也存在问题,我现在没有时间详细说明。