1

私はMichael Hartlのチュートリアルに取り組んでいます。

これらのテストを紹介しましたuser_pages_spec.rb

describe "edit" do
  let(:user) { FactoryGirl.create(:user) }
  before do
    sign_in user
    visit edit_user_path(user)
  end

  describe "page" do
    it { should have_content("Update your profile") }
    it { should have_title("Edit user") }
    it { should have_link('change', href: 'http://gravatar.com/emails') }
  end

  describe "with invalid information" do
    before { click_button "Save changes" }

    it { should have_content('error') }
  end
end

私のsessions_helper.rbファイルは次のとおりです。

module SessionsHelper
  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user= user
  end

  def current_user=(user)
    @current_user=user
  end

  def current_user
    remember_token = User.encrypt(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def signed_in?
    !current_user.nil?
  end

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
end

テストを実行すると、4 つすべてが失敗し、次のようなエラー メッセージが表示されます。

1) User pages edit page 
   Failure/Error: sign_in user
   NoMethodError:
     undefined method `sign_in' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_4::Nested_1:0x007fcd57928138>
   # ./spec/requests/user_pages_spec.rb:90:in `block (3 levels) in <top (required)>'

ユーザー ページの仕様を取得して、sessions_helper から sign_in 関数を取得するにはどうすればよいですか? users_controller はそれを使用できます。私が間違ってやったのはただのテストファイルです。

SessionsHelper を明示的に含めてみましたが、役に立ちませんでした。

4

1 に答える 1

1

リスト 9.1sign_in userでの呼び出しの導入は最近の変更であり、このメソッドはリスト 9.6 まで RSpec で使用するために導入されていないという事実と矛盾していました。元のバージョンは正しかったことが判明し、その呼び出しはその後削除されました。sign_in user

于 2013-09-17T22:35:13.187 に答える