2

私が書いた最初の Rails アプリは、 railstutorialの手巻き認証を使用していました。

2 つ目のアプリでは 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 に答える