Adam, Thanks for the suggestions.
I ended up not using another table, but just adding a post_type column to the Post model. I think it works much simpler this way. I ended up defining the values as a constant hash inside the Post model and creating a validation that checks submitted value is one of the values in the hash constant. Thanks for the links, as well! Misha On Oct 18, 1:15 pm, Adam Grant <[email protected]> wrote: > Hi Misha, > > belongs_to/has_many is the ideal here. > > it "should have the right post type" > post_type = PostType.first > post = Post.create(@attr.merge(:post_type => post_type)) > post.post_type.should == post_type # or post.post_type_id.should == > post_type.id > post.errors.should be_empty? # not sure about the Rspec syntax here, > something like that though > end > > If you want to add validations, then you can also write a spec to create the > post without the post_type, try saving, and add an assertion that an error > about empty post_type shows up. > > I would look into FactoryGirl for database records instead of fixtures. We > use it here at Sony, and it works amazingly. > > Personally, I wouldn't test the associations on the model too much. They are > pretty well tested on the Rails end. I would test the controller actions > that assign params to the object though and save it (in a functional test > for the controller), because that is code you will have to write, to make > sure it goes the full stack. That would be a more useful test. But if you > are just trying to learn, then this is a good exercise, what you are doing > here. > > Resources:http://guides.rubyonrails.org/http://railsforzombies.org/http://www.codeschool.com/courses/rails-best-practices > railscasts.com > > Hope that helps, > Adam > > > > > > > > On Mon, Oct 17, 2011 at 11:06 PM, misham <[email protected]> wrote: > > Hi, > > > I'm trying to figure out how to test a relationship between two models > > using RSpec and Rails 3.1 > > > I included a RSpec file with a sample test that passes. I'm trying to > > write a test that will validate assignment of one of the Post Types > > and check that it was assigned correctly. This testing the same > > behavior as picking a Post Type using a drop-down menu and having it > > saved with the new Post. > > > * How would I write the last test in the sample RSpec file below? > > * Is there a good tutorial or resource on testing this kind of > > behavior? > > * Is this a good way to represent this association? Would has_one/ > > has_many be better instead of belongs_to/has_many? > > > Thank you > > > - Misha > > > ------------- > > Code: > > > The sample data in the Post Types is: > > > id | value | ... > > 1 | foo | ... > > 2 | bar | ... > > 3 | baz | ... > > > # app/models/post_type.rb > > class PostType < ActiveRecord::Base > > attr_reader :name > > > has_many :posts > > end > > > # app/models/post.rb > > class Post < ActibeRecord::Base > > attr_accessible :content > > > belongs_to :post_type > > end > > > # spec/models/post_spec.rb > > describe Post do > > before :each do > > @attr = { :content = "Lorem ipsum" } > > end > > > # ... other tests > > > describe "post type association" do > > before :each do > > @post = Post.create @attr > > end > > > it "should have a post type attribute" do > > @post.should respond_to :post_type > > end > > > it "should have the right post type" > > end > > end > > > -- > > SD Ruby mailing list > > [email protected] > >http://groups.google.com/group/sdruby -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby
