Javascript 运行使用使用小部件工厂构建的jQuery插件的jasmine规范时出现TypeError
我正在使用一个名为内联编辑的jQuery插件 当代码在页面中实际使用时,一切正常 但是,我的测试套件失败,出现以下错误:Javascript 运行使用使用小部件工厂构建的jQuery插件的jasmine规范时出现TypeError,javascript,jquery,jasmine,jasmine-jquery,Javascript,Jquery,Jasmine,Jasmine Jquery,我正在使用一个名为内联编辑的jQuery插件 当代码在页面中实际使用时,一切正常 但是,我的测试套件失败,出现以下错误: TypeError:无法调用未定义的方法“remove” 我在这个特定插件的clear方法中跟踪到它被触发。可以找到它的源文件 该代码中有两个相关位: 1-\u init功能 self.element.addClass("toggleEdit toggleEdit-edit toggleEdit-edit-" + self._tag(self.element)) //s
TypeError:无法调用未定义的方法“remove”
我在这个特定插件的clear
方法中跟踪到它被触发。可以找到它的源文件
该代码中有两个相关位:
1-\u init
功能
self.element.addClass("toggleEdit toggleEdit-edit toggleEdit-edit-" +
self._tag(self.element))
//store reference to preview element
.data("toggleEdit-preview", self.p);
self.element.data("toggleEdit-preview").remove();
如您所见,当插件第一次实例化时,它使用self
上的data
结构来存储新创建的元素
2-清除功能
self.element.addClass("toggleEdit toggleEdit-edit toggleEdit-edit-" +
self._tag(self.element))
//store reference to preview element
.data("toggleEdit-preview", self.p);
self.element.data("toggleEdit-preview").remove();
然后,clear
函数尝试访问该结构并检索元素。这时,在jasmine规范中,它失败了,出现了前面提到的异常
有人见过类似的东西吗
编辑:
这是我的规范,它是能够重现错误的最简单的代码:
it("should update the given attribute on the server", function(){
$('#user-details input, #user-details select').toggleEdit(); //this line triggers the error
});
我正在查看toggleEdit的源代码,似乎只有在设置self.element.data之前才调用函数clear:
if (typeof self.element.data("toggleEdit-preview") !== "undefined") {
self.clear();
self.disableEvents();
}
在销毁功能中:
destroy: function() {
var self = this;
self.clear();
self.disableEvents();
$.Widget.prototype.destroy.apply(self, arguments);
}
由于第一个调用似乎是受保护的,我问您一个有点愚蠢的问题:是否有可能两次调用destroy?发现了我的问题:jQuery+jQuery UI duo的旧版本。升级它们可以解决异常。根据我的测试,它不会被调用两次。这就是让我讨厌的地方。jQuery按照小部件工厂协议调用Destroy,但调用它时,它似乎引用了不同的this
。