Условное утверждение Rspec: have_content A ИЛИ have_content B - PullRequest
1 голос
/ 01 ноября 2011

Я знаю, что это был бы действительно новый вопрос, но я должен был его задать ...

Как мне связать различные условия, используя логические 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 Ответ

2 голосов
/ 01 ноября 2011

Обычно вы не пишете тест, который при одинаковых входах / настройках дает разные или неявные результаты / ожидания.

Это может быть немного утомительно, но лучше выделить ожидаемые ответы в зависимости от состояния на момент запроса. Чтение в вашем примере; Вы, кажется, проверяете, вошел ли пользователь в систему или авторизован, а затем показывает сообщение. Было бы лучше, если бы вы разбили различные состояния на контексты и проверили для каждого типа сообщения, например:

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...