私はユーザーコントローラーを持っていて、インデックスページをテストしたいです.Michael Hart'lによるレールチュートリアルの例を探しています.ユーザー、およびユーザーが管理者である場合のテストの外観、はいの場合、ユーザーには、管理者がそれらを破棄できるようにする「削除」リンクが必要です):
require 'spec_helper'
describe "user pages" do
subject { page }
describe "index" do
let(:user) { FactoryGirl.create(:user) }
before(:each) do
sign_in user
visit users_path
end
it { should have_title('Users') }
it { should have_content('Users') }
describe "delete links" do
it { should_not have_link("delete") }
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit users_path
end
it { should have_link("delete", href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should_not have_link('delete', href: user_path(admin)) }
end
end
end
私のユーザーファクトリーは次のように定義されています:
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "Person #{n}" }
sequence(:email) { |n| "person_#{n}@example.com"}
password "foobar"
password_confirmation "foobar"
factory :admin do
admin true
end
end
end
ここでは問題はなく、すべてのテストもパスしています。しかし、コメントするか、上記のテストから次の行を削除すると:
let(:user) { FactoryGirl.create(:user) }
before(:each) do
sign_in user
visit users_get_path
end
エラーが表示されます:
1) user pages index delete links as an admin user
Failure/Error: it { should have_link("delete", href: user_path(User.first)) }
expected #has_link?("delete", {:href=>"/users/2395"}) to return true, got false
# ./spec/requests/user_pages_spec.rb:40:in `block (5 levels) in <top (required)>'
2) user pages index delete links as an admin user should be able to delete another user
Failure/Error: click_link('delete', match: :first)
Capybara::ElementNotFound:
Unable to find link "delete"
# ./spec/requests/user_pages_spec.rb:43:in `block (6 levels) in <top (required)>'
# ./spec/requests/user_pages_spec.rb:42:in `block (5 levels) in <top (required)>'
なぜ失敗するのか、ここでは理解できません。また、「リンクの削除」ブロックの最初の before ブロックと他の例との関係は何ですか? 簡単な説明が必要です、ありがとう