16

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?

2 Answers 2

34

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 }
Sign up to request clarification or add additional context in comments.

Comments

16

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.