У меня есть приложение, которое включает/отключает кнопки в ответ на события, которые происходят в пользовательском интерфейсе.
Я могу легко использовать capybara, чтобы определить, существует ли кнопка
should have_button 'save'
но я не знаю, как проверить состояние кнопки сохранения. То есть:
Как написать выражение Capybara, которое проверяет наличие кнопки и в ее включенном или отключенном состоянии?
Я взломал чек для отключенной кнопки; для включенного, я полагаю, что я мог проверить, что есть соответствующая кнопка, и что нет соответствующей кнопки отключения. Но это, мягко говоря, неуклюже.
Это похоже на такой фундаментальный контроль пользовательского интерфейса, что я уверен, что что-то пропустил, но я не могу понять, что.
Следите за ответами на gregates:
Как я упоминал в комментарии, поведение Capybara зависит от базового драйвера. Мы используем webkit, и он возвращает "истинные" / "ложные" строковые результаты. По-видимому, другие драйверы возвращают true/false. Люди в Capybara знают о проблеме (github.com/jnicklas/capybara/issues/705), но они чувствуют (возможно, правильно), что на самом деле их проблема не решена.
Вместо того, чтобы мои тесты зависели от используемого драйвера, я закончил создание пользовательского совпадения:
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
Затем вы можете ввести:
user_license_area.find_button('Save').should be_disabled