0
所以我正在通過CodeSchool的Rspec track(我在4級),並且我喜歡重寫這些示例以加強我的正在學習。我設置了一個模仿殭屍類狗類,以及跑了相同的測試,但由於某些原因,我發現了錯誤:CodeSchool的Rspec示例給了我NoMethodError:'undefined method'+'for nil:NilClass'
1) Dog is a genius dog
Failure/Error: before { dog.learn_trick }
NoMethodError:
undefined method `+' for nil:NilClass
# ./app/models/dog.rb:19:in `learn_trick'
# ./spec/models/dog_spec.rb:23:in `block (2 levels) in <top (required)>'
2) Dog is not a dummy dog
Failure/Error: before { dog.learn_trick }
NoMethodError:
undefined method `+' for nil:NilClass
# ./app/models/dog.rb:19:in `learn_trick'
# ./spec/models/dog_spec.rb:23:in `block (2 levels) in <top (required)>'
我不明白爲什麼,這裏是代碼:
CodeSchool型號:
class Zombie < ActiveRecord::Base
attr_accessible :name
validates :name, presence: true
def eat_brains
self.iq += 3
end
def dummy?
iq < 3
end
def genius?
iq >= 3
end
end
我的模型
class Dog < ActiveRecord::Base
validates :name, presence: true
def learn_trick
self.iq += 3
end
def genius?
iq >= 3
end
def dummy?
iq < 3
end
end
注意:我不使用attr_accessible,因爲我使用的是Rails4。
的CodeSchool規格
describe Zombie do
let(:zombie) { Zombie.new }
subject { zombie }
before { zombie.eat_brains }
it 'is not a dummy zombie' do
zombie.should_not be_dummy
end
it 'is a genius zombie' do
zombie.should be_genius
end
end
我的規格
describe Dog do
let(:dog) { Dog.new }
subject { dog }
before { dog.learn_trick }
it "is not a dummy dog" do
dog.should_not be_dummy
end
it "is a genius dog" do
dog.should be_genius
end
end
任何人都可以解釋爲什麼我得到NoMethodError? 另外,我知道這個網站上的問題通常是學習實踐,但希望理解爲什麼我得到這個錯誤將幫助我在以後寫更多的實際測試。 謝謝。
你還沒有在新記錄中初始化'iq',所以它的值是'nil',你嘗試增加它就是以這種方式失敗。 –