我有一个自定义操作来验证子属性的数量。我把它放在父母的模型中:
class Location < ActiveRecord::Base
has_many :blacklisted
accepts_nested_attributes_for :blacklisted, :reject_if => lambda { |a| a[:mac].blank? }, :allow_destroy => true
...
validate :check_blacklisted_clients_count
private
def check_blacklisted_clients_count
if self.blacklisted.reject(&:marked_for_destruction?).count > 25
self.errors.add :base, "No more than 25 blacklisted clients allowed per location."
end
end
当我通过浏览器添加时效果很好,但是我试图用 rspec 测试它,但我不能让它失败(或通过,无论你怎么看)。
it "should not allow 26 blacklisted macs", :focus => true do
loc = FactoryGirl.create(:location_full)
25.times do
loc.blacklisted.create(mac: '00:22:33:44:55:66')
end
loc.blacklisted.create(mac: '00:22:33:44:55:66')
puts loc.blacklisted.count
.........
end
(我知道这实际上还没有测试任何东西——我只是想确保只创建了 25 个)。
我假设这是因为 blacklisted.rb 模型中没有验证。
我怎样才能得到 rspec 来测试这个验证?