3

ユーザーをログインさせるためにフィルターの前にRSpecを書き込もうとしています。製品コントローラーがあります。製品を表示するには、ユーザーがログインする必要があります。次のように、spec / support/utilitiesにログインメソッドを追加しました。

def login(user)
  post login_path, email: user.email, password: "password"
end

次に、spec / controllers/productsテストのbeforeフィルターでメソッドを呼び出しました。

before :each do
  user = FactoryGirl.create(:user)
  login(user)
end

テストを実行すると、次のエラーが発生します。

The action '/login' could not be found for ProductsController

私にはルートが/loginあり、ユーザー認証は単純です-Railscasts#250 AuthenticationfromScratchのように。私は何が欠けていますか?

4

2 に答える 2

3

これがコントローラーの仕様である場合、問題は、コントローラーの単体テスト時にルートが使用できないことです。ポイントは、ルートがないことを意味する、分離してテストすることです

于 2012-05-18T23:38:27.323 に答える
1

ログインは、ログイン メソッドを持たない ProductsController を呼び出しています。他の人が言ったように、別のコントローラーをテストしているときに、あるコントローラーを呼び出すことはありません。したがって、別の方法でログインする必要があると思います。例えば:

def login(user)
  session[:user_id] = user.id
end
于 2012-05-22T16:39:10.357 に答える