Подтвердить что ты не робот

Перенаправление тестирования с RSpec и Capybara (Rails)

Я только что узнал, насколько крутой RSpec и Cabybara, и теперь он работает над этим, чтобы научиться писать фактический тест.

Я пытаюсь проверить, если после нажатия ссылки есть перенаправление на определенную страницу. Ниже приведен сценарий

1) I have a page /projects/list
        - I have an anchor with html "Back" and it links to /projects/show

Below is the test i wrote in rspec

describe "Sample" do
  describe "GET /projects/list" do
    it "sample test" do
      visit "/projects/list"
      click_link "Back"
      assert_redirected_to "/projects/show" 
    end
  end
end

Сбой теста с сообщением об ошибке, как показано ниже

    Failure/Error: assert_redirected_to "/projects/show"
     ArgumentError:
       @request must be an ActionDispatch::Request

Пожалуйста, предложите мне, как я должен проверить перенаправление и что я делаю неправильно?

4b9b3361

Ответ 1

Попробуйте current_path.should == "/projects/show"

Capybara также реализует метод current_url для полного URL-адреса.

Дополнительная информация в docs.

Ответ 2

Я не уверен, что это может быть то, что вам нужно, но в моих тестах я предпочитаю такой подход:

...
subject { page }
...
before do
    visit some_path_path
    # do anything else you need to be redirected
end
it "should redirect to some other page" do
    expect(page.current_path).to eq some_other_page_path
end

Ответ 3

Из Разработать wiki:

В Rails при перенаправлении приложения стойки (подобно тому, как Warden/Devise перенаправляет вас на страницу входа в систему), ответ не будет соответствующим образом обновлен сеансом интеграции. Как следствие, помощник assert_redirected_to не работает.

Также эта страница имеет ту же информацию: Rspec убедитесь, что мы закончили с правильным путем

Итак, вам нужно будет проверить, что вы сейчас находитесь на этом URL-адресе, а не проверять, что вы перенаправлены на него.

Ответ 4

Вам нужно использовать маршрут, например:

assert_redirected_to projects_path

а не

assert_redirected_to "/projects/show"