2012-11-06 32 views
12

Rails uygulamasında, uygulamamın çeşitli sayfalarını test eden bir dizi salatalık kabul testine sahibim. Salatalık ile, @javascript ile belirli bir sınama (senaryo) etiketleme, senaryosunun JavaScript'i desteklemeyen daha basit bir sürücü yerine bir JavaScript sürücüsü kullanarak çalışmasına neden olur.Capybara ile, şu anda kullanılan sürücünün JavaScript'i destekleyip desteklemediğini nasıl anlarım?

Testlerimin, şu anda JavaScript'i destekleyen bir sürücüyle mi çalıştırılmadığını mı yoksa bir tanesinin bulunup bulunmadığını belirlemek için kolay bir yolu var mı? Bunu sağlamak istiyorum, böylece JavaScript'im etkin olarak çalıştırılırsa testlerimin biraz farklı davranmasını sağlayabilirim. Bir senaryo değerinin kontrol ederek adım tanımlarında etiketli olması halinde

Before('@javascript') do 
    @javascript = true 
end 

Sonra test edebilirsiniz: Bunu yapmanın en kolay yolu, bir Before kanca içinde bir örnek değişkeni ayarlamaktır gibi

cevap

25

, ben documentation for Capybara bir göz attım ve başka bir olası çözüm buldu:

if Capybara.current_driver == Capybara.javascript_driver 
    # Supports JavaScript 
else 
    # Doesn't support JavaScript 
end 
+0

İyi fikir - kabul edilen cevap bu olmalı ... –

+0

Tamam o zaman. Bu sorunun cevabını hem bu soruya hem de bu cevabı gönderen kişiden beri sıralamaktan çekiniyordum. Ama sen de bu cevabı beğenmiş gibisin, devam edip kabul ediyorum. – Ajedi32

+1

javascript_driver öğesinin poltergeist olması dışında, ancak sizin özel örneğiniz aslında selenyum kullanıyorsa – steve

2

this answer beri bana görünüyor Bu örnek değişkeni:

When /^I go to the homepage$/ do 
    if @javascript 
    ... 
    else 
    ... 
    end 
end 

bunu test ettik ve işe gibi görünüyor. kimse ilgi durumda

7

Biraz iğrenç, ama bu ben indi budur. Bir yerde özünden aldım düşünün üzgünüm ilgili bağlantıyı kaybetti ama en azından oldukça basittir: Eğer define (veya Gemfile içinde gerektirir) sürücüleri etkin diğer js varsa ayrıca

def javascript_test? 
    [:selenium, :webkit, :chrome, :poltergeist].include?(Capybara.current_driver) 
end 

olurdu onları bu listeye ekle.

İlgili konular