ジャスミンユニットテストでシノンを使用してjQueryアニメーションを偽造するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/7324043

質問

私は1秒のjQueryを持っています .animate ページの読み込みから5秒後に起動するアクション。ジャスミンユニットテストコードにシノンタイマーを設定し、7秒のダニの後にテストして、後のアニメーション特性が本来あるべきかどうかを確認しました。

うまくいかないので、アニメーション自体のインスタンスをJasmine HTMLテストページに配置して、何が起こっているのかをよりよく確認しました。

  • FirefoxとChromeでは、ページが読み込まれ、アニメーション関数が呼び出され、ユニットテストはすぐに失敗し、その後(すぐに)アニメーションが目に見えて発生します。

  • IE、Opera、Safariでは、ページのロードがあり、アニメーション関数が呼び出され、単位テストはすぐに失敗し、アニメーションは目に見えて発生することはありません。

私が望んでいたのは、次のことでした(すべてのブラウザで):

  • ページの読み込み、アニメーション関数が呼び出され、アニメーションが瞬時に完了し、ユニットテストがすぐに成功します。

見つめている シノンのドキュメント, 、それは偽のタイマーが次のプロセスをカバーしています:setTimeout, clearTimeout, setInterval, clearInterval, Date

jqueryのアニメーションがどのように機能するかはわかりませんが、CSSを使用して移行していると思います。 useFakeTimers, 、だから私はこれが問題だと思います。ただし、問題について正しい場合は、解決策が必要です。

たぶん私はシノン以外の何かを試すべきですか?ジャスミン waits() このテストでは完全に機能しますが、私のような焦りの人々にとっては信じられないほど非現実的です。

他に提案はありますか?私はJSユニットテストに慣れていないことに注意してください。そのため、あいまいな答えは私を助ける以上に私を混乱させます。 ; o)

役に立ちましたか?

解決

使用できます jQueryオフ jquery効果をオフにするには:

jQuery.fx.off = true

これは、イベントが発生するのを7秒間待つことの問題を解決することはありませんが、予想どおりにDOMが変更されたことをテストできることを意味します。

他のヒント

私は同じ問題を抱えていました。 jqueryのアニメーションが利用しているので起こると思います requestAnimationFrame() 代わりに利用可能である場合 setTimeout().

私はすべてのブラウザ固有の設定でこの問題を回避しました requestAnimationFrame 上の関数 window nullへのオブジェクト:

window.webkitRequestAnimationFrame = null;
window.mozRequestAnimationFrame = null;
window.oRequestAnimationFrame = null;

このコードが実行されることを確認してください jQueryはロードされています。

Sinonjsがここに示したように、それは可能だと思います: http://sinonjs.org/qunit

test("should animate element over 500ms", function () {
   var el = jQuery("<div></div>");
   el.appendTo(document.body);

   el.animate({ height: "200px", width: "200px" });
   this.clock.tick(510);

   equals("200px", el.css("height"));
   equals("200px", el.css("width"));
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top