这很简单。我的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文件中,并已验证它是由跑步者加载的。
有什么建议吗?
答案 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也存在问题,我现在没有时间详细说明。