#ruby-on-rails #testing #rspec
#ruby-on-rails #тестирование #rspec
Вопрос:
Я знаю, что это был бы действительно вопрос новичка, но я должен был его задать…
Как мне связать различные условия, используя логические OR, AND и Rspec?
В моем примере метод должен возвращать true, если на моей странице есть какое-либо из этих сообщений.
def should_see_warning
page.should have_content(_("You are not authorized to access this page."))
OR
page.should have_content(_("Only administrators or employees can do that"))
end
Спасибо за помощь!
Комментарии:
1.
satisfy
сопоставитель, похоже, является решением… но по-прежнему нет решения для моего конкретного вопроса
Ответ №1:
Обычно вы не стали бы писать тест, который при одинаковых входных данных / настройках выдает разные или неявные выходные данные / ожидания.
Это может быть немного утомительно, но лучше разделить ожидаемые ответы на основе состояния на момент запроса. Читая ваш пример; вы, кажется, проверяете, вошел ли пользователь в систему или авторизован, а затем показываете сообщение. Было бы лучше, если бы вы разбили разные состояния на контексты и протестировали для каждого типа сообщения, например:
# logged out (assuming this is the default state)
it "displays unauthorized message" do
get :your_page
response.should have_content(_("You are not authorized to access this page."))
end
context "Logged in" do
before
@user = users(:your_user) # load from factory or fixture
sign_in(@user) # however you do this in your env
end
it "displays a permissions error to non-employees" do
get :your_page
response.should have_content(_("Only administrators or employees can do that"))
end
context "As an employee" do
before { @user.promote_to_employee! } # or somesuch
it "works" do
get :your_page
response.should_not have_content(_("Only administrators or employees can do that"))
# ... etc
end
end
end
Комментарии:
1. Спасибо @jdeseno!! извините за мою задержку с возвращением. Хотя вы не совсем точно отвечаете на мой вопрос, я думаю, что сам мой вопрос был неправильным… и ты указал мне путь к выходу 🙂