タイプエラーウィジェット工場を使用して構築されたjQueryプラグインを使用するジャスミン仕様を実行するとき
-
28-10-2019 - |
質問
私は呼ばれるjQueryプラグインを使用しています ToggleEdit インライン編集用。
コードが実際にページで使用されている場合、すべてが正常に機能します。
ただし、テストスイートは次のエラーで失敗します。
TypeError: Cannot call method 'remove' of undefined
私はそれを追跡して内部からトリガーされます clear
この特定のプラグインの方法。そのソースファイルを見つけることができます ここ.
そのコードには2つの関連ビットがあります。
1- _init
関数
self.element.addClass("toggleEdit toggleEdit-edit toggleEdit-edit-" +
self._tag(self.element))
//store reference to preview element
.data("toggleEdit-preview", self.p);
ご覧のとおり、プラグインが最初にインスタンス化されると、 data
構造 self
新しく作成された要素を保存します。
2- clear
関数
self.element.data("toggleEdit-preview").remove();
clear
その後、関数はその構造にアクセスして要素を取得しようとします。それは、ジャスミンの仕様内で、前述の例外で失敗するときです。
誰かが似たようなものを見たことがありますか?
編集:
これは私の仕様です。エラーを再現できる最も単純なコードです。
it("should update the given attribute on the server", function(){
$('#user-details input, #user-details select').toggleEdit(); //this line triggers the error
});
http://alz.so/static/plugins/toggleedit/jquery.toggleedit.js
解決 2
私の問題を見つけました:jquery + jquery ui duoの古いバージョン。それらをアップグレードすると、例外が解決します。
他のヒント
私はToggleeDitのソースを見ていましたが、Clearの2倍の2倍の唯一の機能は、self.element.dataが設定される直前です。
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);
}
最初の呼び出しが保護されているように見えるので、私はあなたにやや愚かな質問をします:破壊が2回呼ばれる可能性はありますか?
所属していません StackOverflow