5

jasmine と jasmine-jquery を使用して JavaScript を少しテストしようとしています

だから私はこのJavascriptのビットを関数に持っています

trackTransition = ()->
  $("#test").on "transitionend MSTransitionEnd webkitTransitionEnd oTransitionEnd", ()-> 
    console.log "trans End"

cssトランジションを追加するspec.cssにいくつかのスタイルを適用し、いくつかのhtmlをフィクスチャに追加してから、ジャスミン仕様に次のように追加しました。

   describe "Checks when animation finished", ->
      beforeEach ->
        @trans = spyOnEvent('#test', 'transitionend MSTransitionEnd webkitTransitionEnd oTransitionEnd')
        jasmine.Clock.useMock()
        trackTransition()

      it "Should check when transition ended", ->
        expect(@trans).not.toHaveBeenTriggered()
        jasmine.Clock.tick(1001)
        expect(@trans).toHaveBeenTriggered()

これをページでテストして問題なく起動しましたが、ランナーでは失敗し、console.log も実行されません。遷移をテストできますか?

4

1 に答える 1

5

このカントjasmine.Clockは、時間を変更したり、テストを 1000 ミリ秒待機させたりしない原因となります。上書きするだけwindow.setTimeoutです。したがって、呼び出すたびにsetTimeout(someFunction, 1000)、渡された関数と時間が保存されます。次に、呼び出すtickと、呼び出しに渡した時間よりも短い時間で保存された関数を呼び出すだけtickです。

したがって、transitionEnd イベントをテストする唯一の方法は、イベントを手動でトリガーすることです。また、特定の時間後にイベントが発生するかどうかをテストすることはあまり意味がありません。これは、依存しているブラウザーの動作であるためです。

于 2013-05-02T18:38:30.157 に答える