그래서 을 가질 수있는 Game
클래스가 있고 각 Version
은 많은 GameStats
을 가질 수 있습니다. 나는 각각 Version
belongs_to
, Game
, 그리고 각각 GameStat
belongs_to
a, Version
및 has_one
Game
부터 Versions
까지 가지고있다. 내 테스트에서 game
및 version
개체에 대한 응답을 테스트 할 때 개체 평등에 대해 이러한 테스트는 통과하지만 @stats.game
을 호출하여 개체를 참조하려고하면 #<NoMethodError: undefined method 'game' for nil:NilClass>
이 표시됩니다. 나는 여기 레일 콘솔에서 @stats.game
을 수행 할 수 있기 때문에 매우 혼란 스럽지만 테스트에는 존재하지 않습니다.Rspec 테스트에서 nil 클래스에 대해 정의되지 않은 메서드
class Game < ActiveRecord::Base
has_many :versions, dependent: :destroy
has_many :platforms, through: :versions
has_many :game_stats, class_name: 'GameStats', through: :versions
validates :name, presence: true
end
class GameStats < ActiveRecord::Base
belongs_to :version
has_one :game, through: :version
validates :version_id, presence: true
end
class Version < ActiveRecord::Base
belongs_to :game
belongs_to :platform
has_many :game_stats, class_name: 'GameStats'
validates :game_id, presence: true
validates :platform_id, presence: true
end
그리고 내 RSpec에 파일 (관련 부분은)과 같이이다 :
관련 모델 코드
는 여기describe GameStats do
let!(:game) { FactoryGirl.create(:game) }
let!(:platform) { FactoryGirl.create(:platform) }
let!(:version) { FactoryGirl.create(:version, game: game, platform: platform) }
before do
@stats = FactoryGirl.create(:game_stats, version: version)
end
subject { @stats }
....
it { should respond_to(:version) }
it { should respond_to(:game) }
its(:version) { should eq version }
its(:game) { should eq game }
...
describe "2 different days stats should have the same game" do
before do
@stats.save
@another_stats = FactoryGirl.create(:game_daily_stats, version: version, datestamp: Date.yesterday)
@another_stats.save
end
expect(@another_stats.game).to eq @stats.game
end
end
사람이 오류가 발생하는 이유 어떤 생각을 가지고 있습니까?
저는 RSpec-rails 2.14.0, factory_girl_rails 4.2.1을 사용하여 Rails 4.0.0, Ruby 2.0.0-p247을 사용 중입니다.
감사합니다 인스턴스 변수 대신
let
를 사용합니다. 그게 효과가 있었고, 나는 그것을 놓쳤다는 것을 믿을 수 없다. 그건 내게 부주의했다. –모든 rspec 사용자가이 작업을 매일 수행합니다.) – apneadiving