###状況
Ruby on Railsチュートリアル第二版(ver4.0用)を、頭からほぼ手順通りに進めていたところ、10章で通るはずのテストが通らない問題が発生。
リスト10.13で
app/models/user.rb
class User < ActiveRecord::Base
has_many :microposts, dependent: :destroy
#中略
end
とモデルUserのレコードが消去されたときに関連するモデルMicropostのレコードを一緒に消去するコードを挿入し
リスト10.12のテスト
spec/models/user_spec.rb
require 'spec_helper'
describe User do
#中略
describe "micropost associations" do
before { @user.save }
let!(:older_micropost) do
FactoryGirl.create(:micropost, user: @user, created_at: 1.day.ago)
end
let!(:newer_micropost) do
FactoryGirl.create(:micropost, user: @user, created_at: 1.hour.ago)
end
#中略
it "should destroy associated microposts" do
microposts = @user.microposts.to_a
@user.destroy
expect(microposts).not_to be_empty
microposts.each do |micropost|
expect(Micropost.where(id: micropost.id)).to be_empty
end
end
end
end
このテストを実行したところ以下のようなエラーが発生。
Failures:
1) User micropost associations should destroy associated microposts
Failure/Error: @user.destroy
NoMethodError:
undefined method `name' for nil:NilClass
# ./spec/models/user_spec.rb:133:in `block (3 levels) in <top (required)>'
Finished in 4.82 seconds
88 examples, 1 failure
Failed examples:
コンソールからレコードの削除を試行錯誤をしてみたところ
リスト10.13のところで追記した
dependent: :destroy
ってところで詰まってる模様。
###とりあえず解決
んで、いろいろ調べた結果このStackOverflowのページに辿り着いた。
どうもRailsチュートリアルで指定されたRails4.0.5に含まれるActiveRecodeのバグらしい。
GemfileでRailsのバージョン指定を
gem 'rails' '4.1.2'
書き換えて、
ターミナルから
bundle update rails
とRailsをアップデートしたのち
bundle exec rspec spec/
とテストを実行したら無事成功しました。