0

rspec を介していくつかのテストを実行しようとしていますが、トラフィックが再ルーティングされていないというエラーが発生し続けます。特に PUT および DELETE リクエストで発生します。ルーティング エラーは発生しません。エラーは次のとおりです。

Expected response to be a redirect to http://www.example.com/ but was a redirect to https://www.example.com/users/212

私の UsersController は次のようになります。

class UsersController < ApplicationController
  before_filter :signed_in_user, only: [:edit, :update, :index, :destroy]

  .
  .
  .

  def update
    puts "Update called."

    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated"
      sign_in @user
      redirect_to @user
    else
      render 'edit'
    end
  end

それでも、rspecの実行時に「呼び出された更新」は出力されませんが、「呼び出された表示」は常に表示されます。signed_in メソッドは次のようになります。

def signed_in_user
  puts "Signed in?: #{signed_in?}"

  if !signed_in?

    store_location
    flash[ :notice ] = "You must sign in to access this page."
    redirect_to signin_url
  end
end

「サインイン済み」も印刷されません。

エラーの 1 つをスローしているテストを次に示します。

describe "for non-signed-in users" do
  let(:user) { FactoryGirl.create(:user) }

  describe "in the Users controller" do
    describe "submitting to the update action" do
      before { put user_path(user) }
      specify { response.should redirect_to(signin_path) }
    end
  end
end

私の最善の推測は、テストが before 呼び出しの「put」キーワードを尊重していないということですが、その理由やそこで何が起こっているのかわかりません。Rails バージョン 3.2.13 と rspec-rails バージョン 2.11.0 を使用しています。

編集:puts userテスト ステートメントの先頭 (ただし、let ステートメントの後)に挿入すると、エラーが発生します。

undefined local variable or method `user' for #<Class:0x007fd4943743d8>

4

1 に答える 1