如何获取测试许可中的身份验证状态

时间:2011-02-24 21:28:30

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

我编写的第一个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

如何通过清关做同等的事情?我无法解决这个问题。它似乎告诉我控制器是零。

1 个答案:

答案 0 :(得分:0)

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

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

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

在这里,我指定click_link应该使用:delete方法而不是:get,默认情况下它通常会使用click_link方法。我仍然是Rails的新手,几天前几乎没有完成这本书,所以我不确定为什么只有{{1}}在书中工作但不在我的应用程序中(可能是从Rails 3.0转到3.1? ),但这让一切都过去了。