2012-08-03 13 views
7

Bir salatalık senaryosunu başarısızlığa zorlamak için bir yol var mı?Bir salatalık senaryosunu başarısızlığa zorlamak nasıl?

Testlerimin sonunda birkaç başarısız senaryo olup olmadığını kontrol etmem gerekiyor. Bu yüzden bir 'hata' diyaloğunu kontrol edebileceğimi düşündüm ve eğer gerçekleştiyse testi başarısızlığa uğrattım.

Bu, aşağıdaki kodla mümkündür, ancak bir sorun vardır. Bir kez başarısızlık istisnasını yükseltmek! işlevi, daha sonra salatalık sonra kanca geri kalanı çalıştıran durur, böylece çıkış işlevi çağrılmaz.

oldu:

Şimdi
After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    fail!(raise(ArgumentError.new('Unexpected Error dialog!'))) 
    end 
    logout 
end 

:

After() do |scenario| 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(logout) 
    end 
end 

durum istisna olmadan salatalık testi başarısız için daha iyi bir yolu var mı?

cevap

8

Sen kanca sonra normal iddialarını kullanarak başarısız alabilirsiniz deneyin. Capybara/RSpec istisnalar dışında çok şey, ama yapabileceğimi sanmıyorum mı:

page.should have_selector?(:dialog_message, 1, :text => 'Error') 

Ancak, bunu yapmak veya scenario.fail() yaparsanız, hala çıkış olmaz. Bir başlangıç-emin blokta sarmalısın.

bu deneyin:

After do |scenario| 
    begin 
     page.should have_selector?(:dialog_message, 1, :text => 'Error') 
    ensure 
     logout 
    end 
end 

Güncelleme standart iddialarını arayıp doğrudan senaryoyu başarısız istemiyorsanız

, aşağıdakileri yapabilirsiniz - Eğer yerine fail kullanmak gerekir fail!:

After() do |scenario| 
    begin 
    #Checking for Error popups 
    if page.has_selector?(:dialog_message, 1, :text => 'Error') 
     fail(ArgumentError.new('Unexpected Error dialog!')) 
     #Or you can just do fail('Unexpected Error dialog') if you do not care about the type. 
    end 
    ensure 
    logout 
    end 
end 
+0

Teşekkürler Justin, emin blok kullanmayı hiç düşünmedim.Bir istisna oluşturmadan senaryoyu başarısızlığa kavuşturmanın bir yolu olacağını umuyordum. – snowstreams

3

Henüz bir ön cevap veremediğim için, ancak Raise numaralı telefonu aramanın her zaman yürütmeyi durduracağını varsayalım (bir proc veya lambda içinde yapılması gerekmediği sürece değerlendirme ertelendi) .

basitçe

if page.has_selector?(:dialog_message, 1, :text => 'Error') 
    scenario.fail!(StandardError.new('Unexpected Error Dialog!')) 
end 
logout 
+0

Maalesef deneyin 'scenario.fail ('mesajı')' –

+0

sayesinde, tri orada da ed. tanımsız yöntem 'mesajı' "mesajının" için:: String (NoMethodError) Yani bu çalıştı : scenario.fail (çıkış) Bu yarım çalıştı ben hata var. En azından benim oturum açma kodumu çalıştırdı ve testi başarısız oldu, ancak yine de bir hata mesajı verdi: nil için undefined method 'message ': NilClass (NoMethodError) – snowstreams

+0

Bu nereden gelebileceği konusunda biraz kafam karışık - güncelleme yapabilir misiniz Bu hataya neden olan geçerli kod ile soru? –

İlgili konular