Capybara Acceptance TestsでJavaScriptの遅延をスタブする方法 -- javascript フィールド と jquery フィールド と ruby-on-rails フィールド と rspec フィールド と capybara フィールド 関連 問題

How to stub JavaScript delay in Capybara acceptance tests?












6
vote

問題

日本語

My Railsアプリケーションには、ユーザーがリンクをクリックしてから45秒後にポップアップするJavaScriptモジュールが含まれています。その結果、遅延がなかったときに合格した私の受け入れテストは失敗しています。

私はもともと私のCapybaraの受け入れテストでTimecop GEMを早送りしようとしましたが、それは機能しませんでした。ただし、睡眠(45)を追加したとき、それは仕事をしました。明らかに、私は私のスペックに3回眠ることはできませんが、それで私はより速い方法でそれに近づくことができます。

私の実験から締めくくったのは、Rubyが時間を追跡し、JavaScriptは時間を追跡し、タイムカップが早送りのルビー時間を追跡しますが、JavaScriptの時間は早いことです。 JavaScriptイベントがオフになるように、キャピアバラテストで45秒前に早送りする方法はありますか?

これは私のテストが失敗する原因:

<事前> <コード> $('.votable').one('click', '.vote', function() { $('.post-vote'). delay(45000). queue(function() { $(this).dialog('open') }); });

やはり、遅延が取り除かれたとき、私の仕様は渡されますが、遅延が必要です。私のキャピヤーラテストでこれをスタブするにはどうすればよいですか?それとも、ジャス​​ミンで方法をテストする必要がありますか?

英語

My Rails application includes a JavaScript modal that pops up 45 seconds after a user clicks on a link. As a result, my acceptance tests, which used to pass when there was no delay, are failing.

I originally tried to use the Timecop gem to fast-forward time in my Capybara acceptance test, but that did not work. When I added a sleep(45), however, that did work. Obviously, I can't have sleep(45) in my specs 3 times, but it's good to know what does work so I can get closer to that with a faster method.

What I've concluded from my experiments is that Ruby keeps track of time and Javascript keeps track of time and Timecop is fast-forwarding Ruby time but not Javascript time. Is there a way to fast-forward 45 seconds in my Capybara tests so that my Javascript event fires off?

Here is the function that is causing my tests to fail:

        $('.votable').one('click', '.vote', function() {           $('.post-vote').             delay(45000).             queue(function() {                 $(this).dialog('open')             });         }); 

Again, when the delay is removed, my specs pass, but I need the delay. How can I stub this out in my Capybara tests? Or do I need to test the method with Jasmine?

</div
              
   
   

回答リスト

2
 
vote
vote
ベストアンサー
 

最後に、この問題に対する最も簡単な解決策は、Mys.jsファイルを.js.erbファイルにしてから、分岐を使用して、非テスト環境の遅延のみを含めることでした。理想的ではありませんが、他のすべてのソリューションははるかに関与していて、私のビューコードを美しく見えたままにするだけで45秒で私のテストを45秒減少させても構わないと思っていませんでした。

最終コードは次のように見えました:

<事前> <コード> $('.votable').one('click'). '.vote', function() { $('.post-vote'). <% unless Rails.env.test? %> delay(45000). <% end %> queue(function() { $(this).dialog('open') }); });
 

In the end, the simplest solution to this problem was to make my .js file a .js.erb file and then use branching to only include the delay in non-test environments. Not ideal, but all other solutions were much more involved and I was definitely not willing to slow my tests down by 45 seconds just to keep my view code looking pretty.

Final code looked like this:

$('.votable').one('click'). '.vote', function() {   $('.post-vote').    <% unless Rails.env.test? %>      delay(45000).    <% end %>    queue(function() {      $(this).dialog('open')     });  }); 
</div
 
 

関連する質問

13  Capybara / RSPECの前のCapybara / Selenium:すべてのフック  ( Capybara selenium with rspec before all hook ) 
Seleniumによるページ訪問数を減らすために、 before :all フックから訪問方法を呼び出して、単一のページ負荷ですべてのマイ例を実行したいと思いました。ただし、 before :all VS before :each を指定すると、ブラウザ...

35  カピバラのURLにどのように投稿しますか?  ( How do you post to a url in capybara ) 
キュウリ+ Webratからキュウリ+キャピバラに切り替え、CapybaraのURLにコンテンツを投稿できる方法は疑問に思います。 キュウリ+ Webrat私はステップを持つことができました: <事前> <コード> When /^I send "([^"]*)...

4  範囲に合わせてCapybara / RSpecを使用できますか?  ( Can i use capybara rspec to match a range ) 
Rails 3.2.6アプリをテストしています。 は、表現するRSPEC / Capybaraアサーションを作成することができます。例えば: '1970年から1990年の間の映画を求めるならば、ページにそれらの日付の間の映画を含めるべきです:' 例えばで...

0  Capybara-Webkitを使用したjQueryダイアログのテスト  ( Testing jquery dialog with capybara webkit ) 
ユーザーがリンクをクリックしてjQueryダイアログ(http://jqueryui.com/demos/dialog/)をポップアップすると、インタラクションをテストします。 テストしたい: ダイアログがに表示されること ダイアログボックスのそのテキスト...

1  CapyBara :: Poltergeist :: StatusFailError  ( Capybarapoltergeiststatusfailerror ) 
puffing-billy GEMを poltergeist で使用しようとしています。 My <コード> capybara_helper.rb 次のコード: <事前> <コード> Billy.configure do |c| c.cache = t...

0  https://www.google.comのような他のアプリケーションをテストすることは、レールでCapybaraを使用していますか?  ( Is it possible to test other applications like https www google com using capy ) 
私はレールにテストケースを書くのに新しいです。 https://ww.google.com の使用のような他のアプリケーションをテストするためのテストケースを書くことは可能です。 ...

0  WebSocket Railsイベントがテスト環境で終了するのを待つ  ( Wait for websocket rails event to finish in test environment ) 
私のRailsアプリケーションのWebSocket Rails GEMを使用して、ページの一部のリフレッシュをトリガーするイベントを送信します。すべてがうまくいっていますが、私のテストでは(RSPEC + Capybara + Seleniumを使用しています...

0  Ruby SoundCloud Gem:アップロードされたファイルをテストできません  ( Ruby soundcloud gem cannot test uploaded file ) 
SoundCloud GEMのテストに多くを見ていません。ほとんどのすべてが素晴らしかった - しかし私は私のスペックを通してsoundcloudへのファイルをアップロードすることは少し難しいです。 これは問題です: 仕様: <事前> <コード> file ...

3  Capybara、Depise、Cancan、RSPEC統合テスト:302 intement.comへのリダイレクト  ( Capybara devise cancan and rspec integration tests valid sign in 302 redirect ) 
アップデート:Spec / Controllerの代わりにSpec / Requestsにスペック/リクエストの仕様を持っているように、仕様が今機能するように投稿の終わりを参照してください。私のコントローラと統合テストのためにユーザーに署名された有効な署名され...

0  Chrome Remote Driverでアセットを利用するためにCapybaraを入手する方法  ( How to get capybara to utilize assets with chrome remote driver ) 
BitbucketのCICDに移動しようとしていて、私たちのRailsアプリを飲み込んでいます。 BrowserSlessioを活用したいのですが、プリコンパイルされていない限り、私はアセットにアクセスできない問題に遭遇しました。 My Docker-Co...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有