【发布时间】:2014-02-25 04:19:24
【问题描述】:
所以我有一个复杂的 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 个这样的东西是一团糟。
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby rspec