0

以前の質問に問題があり、助けましたが、今は新しい質問をしました。rspec と capybara との統合テストを行っています。

これは私のprofiles_controllers.rbです:

 before_filter :authenticate_user!

  def update
    @profile = current_user.profile
    if @profile.update_attributes(params[:profile])
        flash[:success] = "Профиль обновлен!"
        redirect_to user_path(current_user)
    else
      render 'edit'
    end
  end

それは私のテストファイルです:

describe "ProfilePages" do

subject { page }

describe "edit" do
let(:user) { FactoryGirl.create(:user) }
let(:profile) { FactoryGirl.create(:profile, user: user) }

before do
  login user
  visit edit_profile_path(profile)
end

it { should have_selector('h2', text: 'Заполните информацию о себе') }

describe "change information" do
  let(:new_city)  { "Ulan-Bator" }
  let(:new_phone) { 1232442 }
  let(:new_gamelevel) { "M2" }
  let(:new_aboutme)   { "nfsfsdfds" }
  let(:submit) { "Сохранить" }
  before do
    fill_in "Город",             with: new_city
    fill_in "Телефон",           with: new_phone
    select new_gamelevel,        from: "Уровень игры"
    fill_in "О себе",            with: new_aboutme
    click_button submit
  end
  specify { profile.reload.city.should  == new_city }
  specify { profile.reload.phone.should == new_phone }
  specify { profile.reload.gamelevel.should == new_gamelevel }
  specify { profile.reload.aboutme.should == new_aboutme }
end

describe "submitting to the update action" do
  before  { put profile_path(profile) }
  specify { response.should redirect_to(user_path(user)) }
end
end
end

そして、私はエラーがあります:

失敗/エラー: { response.should redirect_to (user_path(user)) } を指定してくださいcom/users/sign_in

私はDeviseを使用しており、仕様/サポートにログインヘルパーがあります:

def login(user)
 page.driver.post user_session_path, 'user[email]' => user.email, 'user[password]'       =>    user.password
end

そしてconfig.include Devise::TestHelpers, :type => :controllerspec_helper.rbで

warden ヘルパー login_as を使用しようとしましたが、同じエラーが発生しました。セッションが開始されていないことをどのように理解していますか?

4

1 に答える 1

0

これはアプリ コードではなく、テスト コードです。

responseobject はコントローラー統合テスト用であり、Capybara にはそのようなオブジェクトはありません。

通常、pageオブジェクトを使用して応答情報を確認できます。パスチェックの場合、より良いアプローチはcurrent_pathorcurrent_urlです。

したがって、コードは次のように機能します。

current_path.should be(user_path(user))
于 2013-07-13T18:35:28.567 に答える