【发布时间】:2015-04-27 03:40:41
【问题描述】:
我保存了一个相当简单的模型,但遇到了 RSpec 失败,我找不到解决方案。我也在使用 shoulda gem。
CharacterSheet 模型:
class CharacterSheet < ActiveRecord::Base
validates :character_name, :player_name, :strength, :strength_modifier, presence: true
before_validation :calculate_strength_modifier, on: :create
def calculate_strength_modifier
self.strength_modifier = ((self.strength - 10)/2).floor
end
end
RSpec 示例:
RSpec.describe CharacterSheet, type: :model do
let(:character_sheet) { CharacterSheet.new(character_name: "Test Character",
player_name: "Michael",
strength: 18) }
describe "attributes" do
it { expect(character_sheet).to validate_presence_of :character_name }
it { expect(character_sheet).to validate_presence_of :player_name }
it { expect(character_sheet).to validate_presence_of :strength }
it { expect(character_sheet).to validate_presence_of :strength_modifier }
it "saves attributes" do
character_sheet.save!
expect(character_sheet).to be_valid
end
end
end
这些是我遇到的失败:
失败:
1) CharacterSheet attributes should require strength to be set
Failure/Error: it { expect(character_sheet).to validate_presence_of :strength }
NoMethodError:
undefined method `-' for nil:NilClass
2) CharacterSheet attributes should require strength_modifier to be set
Failure/Error: it { expect(character_sheet).to validate_presence_of :strength_modifier }
Expected errors to include "can't be blank" when strength_modifier is set to nil,
got no errors
如果我在 Rails 控制台中手动创建记录,它看起来是正确的。只是测试失败了。
此外,如果我删除 before_validation 调用。唯一失败的是预期的“保存属性”示例。
【问题讨论】:
标签: ruby-on-rails rspec rspec-rails shoulda