2

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

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

4

1 回答 1

0

我做了完全相同的事情,阅读 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 的转变?),但这得到了一切都过去了。

于 2012-02-07T05:38:56.623 回答