开发者

how can I test accepts_nested_attributes_for with Rspec Rails3

开发者 https://www.devze.com 2023-03-16 10:26 出处:网络
I have a model as follows: class Greeting < ActiveRecord::Base attr_ac开发者_开发技巧cessible :headline, :icon, :content

I have a model as follows:

class Greeting < ActiveRecord::Base

  attr_ac开发者_开发技巧cessible :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
0

精彩评论

暂无评论...
验证码 换一张
取 消