1

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

在我的路线文件中:

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

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

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,这确实有效!奇怪的是,如果我更改postget,它将继续工作!O_o 这不奇怪吗?这些方法是如何工作和使用的?

在 Rails API 中,除了类之外,我没有找到任何其他东西:ActionController::TestCase::Behavior

4

1 回答 1

1

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

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

login_create测试操作的正确方法是post :login_create按照您发现的那样使用。

于 2012-09-04T17:38:55.947 回答