我编写的第一个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
如何通过清关做同等的事情?我无法解决这个问题。它似乎告诉我控制器是零。
答案 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? ),但这让一切都过去了。