【问题标题】:How to get the authentication status in clearance for tests如何获得测试许可中的认证状态
【发布时间】:2011-02-24 21:28:30
【问题描述】:

我编写的第一个 Rails 应用程序使用了来自 railstutorial 的手动身份验证。

对于我的第二个应用,我使用的是 Clearance。我正在尝试编写集成测试,以确定单击登录/注销链接是否有效。在 railstutorial 版本中,我可以使用以下内容:

describe "success" do
  it "should sign a user in and out" do
    user = Factory(:user)
    visit signin_path
    fill_in :email,    :with => user.email
    fill_in :password, :with => user.password
    click_button
    controller.should be_signed_in
    click_link "Sign out"
    controller.should_not be_signed_in
  end
end

我如何在许可的情况下做同样的事情?我就是搞不定。它似乎在告诉我控制器是 nil。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 clearance


    【解决方案1】:

    我做了 EXACT 同样的事情,阅读了 Rails 教程,然后使用 Clearance 启动了我自己的应用程序。用户似乎是正确的起点,所以这就是我开始的地方。我什至没有替换显示 Rails 链接等的默认静态主页。我相信这实际上是问题所在。 Clearance 没有定义用户个人资料页面或任何内容,因此当您登录时,它会将您重定向到主页(除非您在其他地方但需要登录)。默认主页只是一个静态文件,因此它不会通过典型的 Rails 请求周期运行,也不会加载任何控制器。

    我最终只添加了一个超级简单的 Pages 控制器(就像在 Rails 教程第 3 章中一样),所以它会在登录后重定向到动态页面。这使得上面的测试几乎 通过。我需要进行的最后一次编辑是

    click_link "Sign Out", :method => :delete
    

    在这里,我指定 click_link 应该使用 :delete 方法而不是 :get,默认情况下它显然会这样做。我对 Rails 还是很陌生,几天前还没有读完这本书,所以我不知道为什么 click_link 在书中工作但在我的应用程序中没有工作(也许是从 Rails 3.0 迁移到 3.1?),但这让一切都过去了。

    【讨论】:

    • 我必须阅读我自己的问题才能知道我问了什么!我想我最终以完全不同的方式做到了这一点,但你的回答是我所问的正确解决方案。
    • 是的,这个问题有点老了,但我的情况是如此完全匹配,我只需要回答它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2017-01-06
    • 2017-05-17
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多