Jak napisać stwierdzenie kapibary, które sprawdza obecność przycisku i jego stan włączony lub wyłączony?

Mam aplikację, która włącza / wyłącza przyciski w odpowiedzi na rzeczy, które mają miejsce w interfejsie użytkownika.

Mogę łatwo użyć kapibary do wykrycia, czy przycisk istnieje

should have_button 'save'

ale nie mam pojęcia, jak zweryfikować stan przycisku Zapisz. To jest:

Jak napisać stwierdzenie kapibary, które sprawdza obecność przyciskui stan włączony lub wyłączony?

Zrobiłem ze sobą hackowanie wyłączonego przycisku; aby włączyć, przypuszczam, że mogę sprawdzić, czy jest odpowiedni przycisk i czy nie ma pasującego wyłączonego przycisku. Ale to, delikatnie mówiąc, jest niezgrabne.

Wydaje się, że jest to taki podstawowy test interfejsu użytkownika, że ​​jestem pewien, że coś przeoczyłem, ale nie mogę zrozumieć, co.

Postępuj zgodnie z odpowiedzią Gregatesa:

Jak wspomniałem w komentarzu, zachowanie kapibary zależy od podstawowego sterownika. Korzystamy z webkita i zwraca on wyniki „true” / „false”. Najwyraźniej inne sterowniki zwracają true / false. Ludzie w Capybara wiedzą o tym problemie (github.com/jnicklas/capybara/issues/705), ale czują (prawdopodobnie poprawnie), że nie jest to ich problem do rozwiązania.

Zamiast tego, że moje testy zależą od używanego przeze mnie sterownika, skończyło się na tworzeniu niestandardowego dopasowania:

RSpec::Matchers.define :be_enabled do
  match do |actual|
    driver_result = actual[:disabled]
    # nil, false, or "false" will all satisfy this matcher
    (driver_result.nil? || driver_result == false || driver_result == "false").should be_true
  end
end

RSpec::Matchers.define :be_disabled do
  match do |actual|
    driver_result = actual[:disabled]
    (driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
  end
end

Następnie możesz wpisać:

user_license_area.find_button('Save').should be_disabled

questionAnswers(5)

yourAnswerToTheQuestion