2012-04-06 11 views
2

ジャスミンとガードを使用して、私のレール3.2アプリケーション用のエバーベースのフロントエンドをテストしようとしています。このために、私はジャスミネリシスとガードジャスミンを使用しています。セットアップは非常に簡単でシンプルで、いくつかのサンプル仕様を実行できます。エバーと一緒に遊ぶことになると、状況は狂ってしまいます。私はそのビデオリーダークラスをテストするという仕様を持っています。 loadVideoメソッドを呼び出すときは、対応するビデオDOM要素の値でvideoHeightプロパティとvideoWitdhプロパティを設定する必要があります。 ブラウザでjasmineを実行するとテストパスになりますが、ガードとファントムを使って実行すると失敗します。私は "640と等しいと期待されていない"と思った。私のDOM要素は、テストがphantomjで実行されたときに考慮されていないようです。ヘッドレステストガードとジャスミンを使用したEmberアプリケーション

describe "VideoReader", -> 
    it "loads video from video DOM element", -> 
    videoDOM = Ember.$("<video width='640' height='480'><source src='/test.mp4'></source></video>")[0]; 

    player = Topper.VideoReader.create(); 

    player.loadVideo(videoDOM); 

    videoHeight = player.get('videoHeight'); 
    videoWidth = player.get('videoWidth'); 

    expect(videoHeight).toEqual(480); 
    expect(videoWidth).toEqual(640); 

スペックは正しく書かれていますか?

答えて

3

Testing in Ember.jsについてのブログ記事を読む必要があります。

私はあなたのTopper.VideoReaderがどのように見えるかわかりませんが、あなたの問題はDOM上で何かを操作し、Ember.jsにそれらの変更を伝播する機会を与えることとは関係ありません。あなたのテストでは、Ember.run(function(){...})コール(例えば、child_views_test.js)に見られるように、バインディングとやりとりする、またはDOMを操作している呼び出しをラップする必要があります。


以下の議論から要約:

  • あなたはDOMとの相互作用をテストするコードは、それがEmber.runコールでラップした場合。
  • あなたのコード内で焼成されたイベントをテストしたいとあなたは、彼らが解雇されたときに正確に制御を持っていない場合は、QUnitのasyncTest
+0

私loadVideo方法と同様に、テストフレームワークで非同期テスト機能を使用次のようになります。 loadVideo:function(videoDOM){ this.set( 'videoHeight'、videoDOM.height);this.set( 'videoWidth'、videoDOM.width); }、 – jrabary

+0

あなたの 'loadVideo'呼び出しを' Ember.run(function(){player.loadVideo(videoDOM);}); 'にラップしようとしましたか? – pangratz

+0

リンクをありがとうございました。 – pjmorse

関連する問題