I have a model as follows:
class Greeting < ActiveRecord::Base
attr_accessible :headline, :icon, :content
belongs_to :user
accepts_nested_attributes_for :user, :reject_if => proc { |a| a[:name].blank? || a[:email].blank? }
How can I do an Rspec test for this?
I just found this shoulda macro, seems like it works fine:
https://gist.github.com/1353500/bae9d4514737a5cd7fa7315338fdd9053dbff543
you should use it like this:
it{ should accept_nested_attributes_for :samples }
Here you have Shoulda
macro for testing accepts_nested_attributes_for
: http://mediumexposure.com/testing-acceptsnestedattributesfor-shoulda-macros/. It does not support any options (such as :reject_if
), only bare accepts_nested_attributes_for
.
But for :reject_if
, you can create a valid Greeting model with nested attributes for User
but without :name
. Then check if user has been saved, and then same with blank :email
So you can do something like this:
describe Greeting
it { expect { Factory(:greeting, :user_attributes => Factory_attributes_for(:user)) }.to change(User, :count).by(1) }
it { expect { Factory(:greeting, :user_attributes => Factory_attributes_for(:user, :name => '')) }.to_not change(User, :count) }
it { expect { Factory(:greeting, :user_attributes => Factory.attributes_for(:user, :email => '')) }.to_not change(User, :count) }
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With