それで、私はMichael Hartl の (素晴らしい) RoR チュートリアルの第 11 章にいます。第 10 章を終えた後、ユーザーのプロフィール ページにマイクロポストを追加して、ホームページだけでなくそこからも投稿できるようにすることにしました。
なんとかうまく動作させましたが、どういうわけかテストスイートがクラッシュします...
User_pages_spec.rb プロファイル ページのすべてのテストで、Rspec から取得したエラー メッセージは次のとおりです。
UserPages profile page
Failure/Error: before { visit user_path(user) }
NoMethodError:
undefined method `microposts' for nil:NilClass
# ./app/controllers/users_controller.rb:17:in `show'
# ./spec/requests/user_pages_spec.rb:60:in `block (3 levels) in <top (required)>'
ここに私のテストファイルがあります:
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
let!(:m1) { FactoryGirl.create(:micropost, user: user, content: "Foo") }
let!(:m2) { FactoryGirl.create(:micropost, user: user, content: "Bar") }
before { visit user_path(user) }
it { should have_selector('h1', text: user.name) }
it { should have_selector('title', text: user.name) }
describe "microposts" do
it { should have_content(m1.content) }
it { should have_content(m2.content) }
it { should have_content(user.microposts.count) }
end
end
ユーザーモデルにマイクロポストメソッドがあります:
has_many :microposts, dependent: :destroy
ユーザー表示ビューに追加したコードは次のとおりです。
<% if current_user?(@user) %>
<section>
<%= render 'shared/micropost_form' %>
</section>
<% end %>
また、UserController の show アクションに @microposts 変数を追加しました。
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
@micropost = current_user.microposts.build
end
すべてがうまくいっているように見えるので、開発と本番環境で、なぜ私のテストが通らないのか理解できません... ユーザープロファイルページにマイクロポストフォームを追加する前に、テストは通っていました...
誰かが問題を説明できる場合は、助けていただければ幸いです。