所以我有一個複雜的RPG角色模型,我正在做一個側面項目。對於這個角色扮演遊戲,每個角色都有6種基本的「能力得分」(力量,靈巧,體質,智慧,智慧,魅力)。我特別關注將它們設置爲0的測試,這應該是無效的(角色死亡等)。以下是我在rspec的:爲循環中的特定對象變量賦值
describe "when ability scores are 0" do
ability_scores = %w(strength dexterity constitution
intelligence wisdom charisma)
ability_scores.each do |ability_score|
@character.ability_score = 0
expect(@character).to be_invalid
end
end
我有一個工廠在文件創建一個完全有效的字符的開始,並設置subject { @character }
我認爲,它將看到ability_score
和思考在對角色對象進行評估之前插入其值,但似乎並非如此。
切換出@character.send(:"#{ability_score}=", 0)
爲@character.ability_score = 0
導致NoMethodError: undefined method 'strength=' for nil:NilClass
然而,單獨的describe
塊很好地工作:
describe "when strength is 0" do
before { @character.strength = 0 }
it { should_not be_valid }
end
但具有這些6是雜亂的混亂。
任何想法?
結果:未定義的方法「實力='for nil:NilClass',也將對字符的引用改爲實例變量。賦值在一個單獨的描述塊中起作用。我將這兩個添加到我原來的quesiton。 – awochna
你在哪裏初始化'@ character'? –
看起來你的期望恰好發生在describe塊的上下文中,而不是在實際的測試中('it {...}'或'specified {..}')。實例變量在該範圍內不可訪問(請參閱編輯答案)。 –