2012-12-24 24 views
10

UI özelliklerini test etmek için bir Salatalık Senaryom var. Bazen çeşitli konulardan biri nedeniyle, web sayfası yanıt vermek için çok zaman alır ve Capybara aşağıdaki hatayla zaman aşımına uğrar.Zaman aşımı için tekrar dene?

ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
ruby-1.9.3-p327/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 

IS- Sorum

ben bir şekilde aşımı hatası, sırasıyla bütün senaryo veya adım (kez sabit sayısı için) yeniden denemek için Salatalık senaryoyu ya Capybara zorlayabilir miyim?

Around do |scenario, block| 
    for i in 1..5 
    begin 
     block.call 
     break 
    rescue Timeout::Error 
     next 
    end 
    end 
end 

Ama bu kod çünkü hata The Cucumber book itibaren (It's not possible to call block several times in Around hook)

cevap

2

Belki, böyle yapabilirsin

Ekle Bir hata kodunu durdurmayı veya bir zaman sınırına ulaşana kadar kod bloğunu çalıştırmaya çalışan bir eventually method. İşte

o yönteme ilişkin koddur:

module AsyncSupport 
    def eventually 
    timeout = 2 
    polling_interval = 0.1 
    time_limit = Time.now + timeout 
    loop do 
     begin 
     yield 
     rescue Exception => error 
     end 
     return if error.nil? 
     raise error if Time.now >= time_limit sleep polling_interval 
    end 
    end 
end 
World(AsyncSupport) 

bir step_definition gelen aşağıdaki gibi çağrılabilir denilen yöntemi: cevap için

Then /^the balance of my account should be (#{CAPTURE_CASH_AMOUNT})$/ do |amount| 
    eventually { my_account.balance.should eq(amount) } 
end 
+0

teşekkürler. Bu yazının ikinci cevabı benim için çalıştı ama bunu aklımda tutacağım. –

+0

+1 Zaman aşımına uğradım: Sadece özel durum hatası. Timeout :: Error neden benim için yakalamadığından emin değilsiniz. < – kikuchiyo

+0

Herhangi bir nedenden dolayı, Timeout :: Error ile hala yakalanmamaktadır. Koyar deyimleri koymak, ve sadece bir kez çalışır ve bir kez başarısız ... oh acı bu app capybara/selenium/webkit çalışan acı! – kikuchiyo

1

eserleri olmadığını anlamaya olamaz:

+0

Teşekkürler! Bu benim problemimi çözmüş olabilir. Artık hata yapmamak. –

+0

Sevindim yardımcı oldu! Cevabınız size yardımcı olduysa kabul edildi olarak işaretlensin. –