2017-12-02 11 views
0

をテストします。フォーム システムにCURRENT_USERを設定すると、私は、ユーザーのために期待されるよう、以下のフローが動作することを確認するために、システムのテストを使用してい

    1. サインアップを
    2. ログインアカウントのページに署名しなさい
    3. アップデートアカウント情報、私は、ユーザーの作成した後、エラーを取得していますが

    Puma caught this error: Couldn't find User with 'id'=16 (ActiveRecord::RecordNotFound) 
    /Me/MyComputer/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activerecord-5.1.4/lib/active_record/core.rb:189:in `find' 
    /Me/MyComputer/Documents/my_app/app/controllers/application_controller.rb:30:in `current_user' 
    

    エラーがapplication_controllercurrent_userを設定するコードを指している:

    def current_user 
        if session[:user_id] 
        @current_user ||= User.find(session[:user_id]) 
        end 
    end 
    

    私の仮定は、それがテストでセッションにアクセスすることはできませんことを正しいですか?もしそうなら、私はcurrent_userを設定して上記のシナリオをテストできますか?そうでない場合は、何が原因でエラーが発生する可能性がありますか?

  • +0

    [セッション付きテストレールコントローラ](https://stackoverflow.com/questions/24365505/testing-rails-controller-with-session)の可能な複製 – Manishh

    +1

    レールシステムテストでは、アプリケーションがしかし、あなたのテストコードはできません。あなたのケースでは、 'current_user'がテストコードではなくアプリケーションコードから呼び出されていると仮定します。その場合、DBの奇妙さの最も一般的な理由は、Pumaインスタンスが、必要な単一モード(同じプロセスが別のスレッド)ではなく、クラスタ化モード(別のプロセス)で実行されていることです。プーマはあなたのテストを開始するときにどのような出力を生成しますか?テストコードを表示すると役立つかもしれないので、あなたがしていることを正確に見ることができます。 –

    +0

    さらに、ログインプロセスをショートカットして現在のユーザーをテストから設定しようとしている場合、一部の認証宝石はそれを可能にするテストモードを提供します。あなたが使っている認証宝石はどれですか? –

    答えて

    1

    あなたのアプリケーションはセッションにアクセスできるはずですが、テストコードではできません。あなたの場合、私はcurrent_userがテストコードではなくアプリケーションコードから呼び出されていると仮定します。その場合、DBの奇妙さの最も一般的な理由は、Pumaインスタンスが、必要なシングルモード(同じプロセスが異なるスレッド)ではなく、クラスタ化モード(別のプロセス)で実行されていることです。テストを実行しているときにPumaの出力をチェックし、 "シングルモード"を指定していることを確認します - テスト環境でPumaの設定を調整して0プロセスと1つ以上のスレッドを使用する必要があります

    関連する問題