ruby-on-rails - 测试 Rails Controller : get and post strange behavior

标签 ruby-on-rails testing rspec controller

我正在使用 RSpec(通过 gem rspec-rails)进行测试和开发 我的应用程序。 我试图“测试”一个 Controller 并遇到 post 和 get 方法的奇怪行为(对于所有其他此类方法都一样)。

在我的路由文件中:

controller :sessions do
    post '/login',  action: :login_create
    get  '/login',  action: :login
    get  '/logout', action: :logout
end

一开始以为post会模拟一个http post 在指定的 url 请求,所以我在我的规范中写道:

describe "POST 'login'" do
    it "returns http success" do
        post 'login'
        response.should be_success
        response.should render_template 'sessions/login_create'
    end
end

但这将调用登录操作,而不是 login_create,然后最后一个断言失败。 经过大量谷歌搜索和实验后,我将 post 'login' 更改为 post :login_create 并且这确实有效! 奇怪的是,即使我将 post 更改为 get,它也会继续工作! O_o 这不奇怪吗?这些方法是如何工作和使用的?

在 Rails API 中,我没有找到任何其他类:ActionController::TestCase::Behavior

最佳答案

您正在编写的是 Controller 规范,而不是请求 规范。在 Controller 规范中,根本不咨询路由,因为 rspec 直接调用 Controller 操作。

当您编写 post 'login' 时,login 指定操作名称,而不是 URL 路径。

如您所见,测试 login_create 操作的正确方法是使用 post :login_create

关于ruby-on-rails - 测试 Rails Controller : get and post strange behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268405/

相关文章:

unit-testing - 解析器的单元测试

testing - 如果你有一个功能的场景/测试,你是否必须测试相反的?

ruby-on-rails - 如何使用嵌套属性和 FactoryGirl 测试 Rails 创建操作?

ruby-on-rails-3 - 如何在 RubyMine 中只对一个规范文件运行一个测试

ruby-on-rails - 是否可以再次保存所有文档?

ruby-on-rails - 捆绑更新时,Bundler 找不到 gem "railties"的兼容版本

javascript - ChaiJS 期望构造函数抛出错误

ruby-on-rails - 轻量级 Rails 3 所见即所得编辑器

ruby-on-rails - Rails - Paperclip - 如何在保存前检查图像尺寸

ruby-on-rails - Rspec 将 sql 记录到控制台以过滤/标记规范