Проблемы при тестировании перенаправления JavaScript - PullRequest
1 голос
/ 28 сентября 2011

Я использую Ruby on Rails 3.1.0 и гем rspec-rails 2. Я хотел бы проверить перенаправление JavaScript, но у меня возникли некоторые проблемы с этим.

В моем файле контроллера у меня есть:

respond_to do |format|
  format.js { render :js => "window.location.replace('#{users_url}');" }
end

В моем файле спецификации у меня есть:

it "should redirect" do
  xhr :post, :create
  response.should redirect_to(users_url)
end

Если я запускаю спецификацию, я получаю следующее:

 Failure/Error: response.should redirect_to(users_url)
   Expected response to be a <:redirect>, but was <200>

Как реализовать код спецификации для корректной проверки перенаправления JavaScript?


ПОПЫТКИ ПРИ РЕШЕНИИ

Если я использую

response.should render_template("window.location.replace('#{users_url}');")

Я получаю

 Failure/Error: response.should render_template("window.location.replace('#{users_url}');")
   expecting <"window.location.replace('http://<my_application_url>/users');"> but rendering with <"">

Если я использую

response.should render_template(:js => "window.location.replace('#{users_url}');")

спецификация успешно проходит, но слишком много! То есть я могу также заявить следующее, и спецификация (неожиданно) пройдет:

response.should render_template(:js => "every_thing")

Я также видел этот вопрос \ ответ , и предлагаемое решение работает, но я думаю, что это лучшее решение для достижения моей цели.

1 Ответ

0 голосов
/ 29 сентября 2011

Спецификации контроллера RSpec используют драйвер rack_test, который не выполняет Javascript. Чтобы проверить страницы, которые используют Javascript для перенаправления, вам действительно нужно взглянуть на другой драйвер.

Капибара с селен-webdriver делает это красиво. Спецификации запроса RSpec заменяют спецификации вашего контроллера для тех тестов, которые основаны на Javascript.

...