我正在使用 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/