2012-11-06 8 views
12

W aplikacji Rails mam zestaw testów akceptacji ogórków, które testują różne strony mojej aplikacji. W przypadku ogórka oznaczenie określonego testu (scenariusza) za pomocą @javascript powoduje, że scenariusz ten jest uruchamiany za pomocą sterownika JavaScript zamiast prostszego sterownika, który nie obsługuje JavaScript.Z Capybara, jak mogę sprawdzić, czy aktualnie używany sterownik obsługuje JavaScript?

Czy istnieje łatwy sposób na sprawdzenie, czy są one obecnie uruchamiane przy użyciu sterownika obsługującego JavaScript lub takiego, który nie obsługuje? Chcę, aby moje testy zachowywały się nieco inaczej, jeśli są uruchamiane przy włączonej obsłudze JavaScript.

Odpowiedz

25

W przypadku gdy ktoś jest zainteresowany, wziąłem spojrzenie na documentation for Capybara i znalazł Innym możliwym rozwiązaniem:

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

Dobry pomysł - to powinna być zaakceptowana odpowiedź ... –

+0

Dobrze, więc. Wahałem się, aby wymienić tę odpowiedź jako zaakceptowaną, ponieważ jestem tą, która opublikowała zarówno pytanie, jak i tę odpowiedź. Ale ponieważ wydaje ci się, że lubisz tę odpowiedź, pójdę dalej i zaakceptuję to. – Ajedi32

+1

To jest OK, chyba że twoim javascript_driver jest (powiedzmy) poltergeist, ale twój konkretny przykład używa selenu – steve

2

Wygląda mi z this answer jak najprostszym sposobem, aby to zrobić, to ustawić zmienną instancji w Before haka:

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

Następnie można przetestować, czy scenariusz jest oznaczony w definicjach kroku sprawdzając wartość tej zmiennej instancji:

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

Testowałem to i wygląda na to, że działa.

7

To trochę nieprzyjemny, ale to właśnie wylądowałem na. Że mam go z GIST gdzieś, przepraszam zgubiłem link do niego, ale przynajmniej jest to całkiem proste:

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

Jeśli define (lub wymagać w Gemfile) inne js włączone sterowniki, trzeba by dodaj je do tej listy.

Powiązane problemy