6

MichaelのRORチュートリアルに従い、ユーザー認証システムを作成しています。ユーザーが他のユーザーを削除できるようにする管理者権限があります。特権管理者ユーザーとしてログインすると、ユーザーリストページに特別な「削除」リンクが表示されます。私のアプリは正常に動作しますが、rspecテストは私にはわからない理由で失敗しています。

テストを別のファイルに分けて、spec/requests/sat_spec.rbpry gemを使用してデバッグしようとしていますが、これまでのところ成功していません。

describe "delete links" do
  describe "as admin user" do
    let(:admin) { FactoryGirl.create(:admin) }
    before do
      sign_in admin
      visit users_path
      binding.pry          
    end
  it { should have_link('delete', href: user_path(User.first)) }

  it "should be able to delete another user" do
    expect { click_link('delete') }.to change(User, :count).by(-1)
  end    
end

テストの失敗:

1) separated admin tests delete links as admin user 
 Failure/Error: it { should have_link('delete', href: user_path(User.first)) }
   expected link "delete" to return something
 # ./spec/requests/sat_spec.rb:25:in `block (4 levels) in <top (required)>'

2) separated admin tests delete links as admin user should be able to delete another user
 Failure/Error: expect { click_link('delete') }.to change(User, :count).by(-1)
 Capybara::ElementNotFound:
   no link with title, id or text 'delete' found
 # (eval):2:in `click_link'
 # ./spec/requests/sat_spec.rb:28:in `block (5 levels) in <top (required)>'
 # ./spec/requests/sat_spec.rb:28:in `block (4 levels) in <top (required)>'

ここでの問題、またはもっと重要なことにそれをデバッグする方法によって何が起こる可能性がありますか?

ここで私のコードをフォークできますhttps://github.com/tomek-rusilko/miniatury_katalog_2

4

2 に答える 2

9

ページ/usersには、ユーザーの横に「削除」リンクが付いたユーザーのリストが含まれている必要があります。しかし、テストデータベースを単純なユーザーで埋めていませんでした。管理者という1人のユーザーが含まれているだけです。しかし、あなたのusers/_user.html.erbこのタイプのユーザーによると、「削除」リンクはありません。したがって、少なくとも1つのユーザー作成ステートメントを追加して、再試行してください。

于 2012-05-26T15:39:45.823 に答える
0
let(:admin) { FactoryGirl.create(:admin) }

(spec / factorys.rbに)持っているので、これは問題ありません

factory :admin do
  admin true
end

しかし、その間、models / user.rbでは:

attr_accessible :name, :email, :password, :password_confirmation

私の賭けは、ファクトリーガールが一括割り当てを使用して:admin => trueを設定し、それがattr_accessibleによって削除されていることです。

しかし、もっと重要なのは、どのようにデバッグするのでしょうか。「何が起こっているのか」と尋ねることによって。と「私は何が起こると期待していますか?」両方の質問の答えが真ん中で出会うまで、そのバリエーション。この場合、私が始める質問は次のとおりです。リンクが表示される原因は何ですか。それは私がスペックで設定したモデルにも当てはまりますか?スペックは私が期待するページにヒットしていますか?ブラウザでページをヒットしたときのモデルは、仕様と同じように動作しますか?

しかし、それらはすべて「何が起こっているのか」のバリエーションにすぎません。と「何が起こると思いますか?」

于 2012-05-26T15:36:37.027 に答える