ruby-on-rails - Rails RSpec 测试简单链接redirect_to 路径

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

我在 Rails 应用程序中编写 RSpec 测试时遇到困难,以确保应用程序主页的简单链接重定向到“关于”页面。我的功能测试文件中有以下内容:

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'

当我将其放入 Controller 规范中时,我得到类似的内容

NoMethodError:
   undefined method `click_link'

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

最佳答案

响应在功能规范中不可用。如果您想断言用户在单击链接后位于特定页面,请尝试:

expect(current_path).to eq about_index_path

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

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

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

关于ruby-on-rails - Rails RSpec 测试简单链接redirect_to 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28661131/

相关文章:

ruby-on-rails - 测试多态注释 Controller Rspec 中的创建操作 - 未定义方法 `comments' 为 nil :NilClass

f# - 将 F# 程序集的 xUnit 测试放在哪里?

ruby-on-rails - Rails 3 - 验证两个字段之一已完成

ruby-on-rails - 如何将字段集添加到 ActiveAdmin 中与列不对应的资源?

ruby-on-rails - Rake Capistrano - 如何传递动态参数来执行 shell 命令

ruby-on-rails - NameError : undefined local variable or method `app' for - Rails 5. 1.6升级

ruby-on-rails - Rails Controller 中的 'env' 和 'request.env' 有什么区别?

ruby-on-rails - ActiveSupport::类方法的回调

asp.net-mvc - ASP.NET MVC 中的 TDD : where to start?

ember.js - 如何对路由转换进行 Ember 集成测试?