Rails RSpec测试一个简单的链接redirect_to路径

时间:2015-02-22 17:50:09

标签: ruby-on-rails rspec tdd capybara response.redirect

我在rails应用程序中编写RSpec测试时遇到困难,以确保从我应用程序主页的简单链接重定向到about页面。我的功能测试文件中包含以下内容:

scenario "Have links redirect to the correct paths" do

  visit '/'

  click_link('about')
  expect(response).to redirect_to('about_index_path')

end

该链接的ID为:' about'从浏览器测试工作,但我想通过测试驱动开发变得更好。有什么建议?我尝试了预期结果的多种变体,但我不断得到像

这样的东西
NameError:
   undefined local variable or method `response'

NoMethodError:
   undefined method `assert_redirect_to'

当我把它放在控制器规范中时,我会得到类似

的内容
NoMethodError:
   undefined method `click_link'

如果有必要,我可以提供更多信息,但我认为这应该是一个非常简单的解决方案(比如测试链接重定向到' http://www.google.com')我只是没找到。任何其他建议的方法表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:4)

response在功能规格中不可用。如果要在单击链接后声明用户位于特定页面上,请尝试:

expect(current_path).to eq about_index_path

功能规范用于通过外部接口(如浏览器)测试某些功能。在功能规范中,您通常会对page对象进行断言。

click_link是一种Capybara方法,用于模拟功能规范中的浏览器交互,而不是控制器规范。控制器规范用于模拟单个http请求,该请求可以针对response对象进行断言。控制器规范非常适合测试重定向,尤其是外部站点:

describe "#index" do
  it "redirects to the google homepage"
    get :index

    expect(response).to redirect_to("http://www.google.com")
  end
end

如果你想要更好地进行测试,我建议学习不同类型的测试,何时应该使用它们,以及如何编写它们。有很多很棒的资源可以帮到你。这是一篇很棒的文章,解释了测试Rails应用程序的好方法:

https://robots.thoughtbot.com/how-we-test-rails-applications