Matt Wynne
2009-Apr-21 07:21 UTC
[rspec-users] How would I spec this? --Rails subscriptions
On 21 Apr 2009, at 00:34, Colfer, Brian wrote:> > I have a set of users > And a set of things ? podcasts > Users should get a page that shows all of the podcassts with a check > box > If they are subscribed then the check box is checked > > Users table has first_name, last_name, user_name > Podcats table has podcast_name, description, url > Subscriptions table has user_id, podcast_id, subscription_type > > > Would the view go in the subscription views? > > Is this a index view? > > > How do I mock out the view? > > I think I want to spec something so that I set up three mock models > for podcasts: > > > before(:each) do > assigns[:user] = @user = stub_model(User, > :new_record? => false, > :user_id => 1, > :first_name => "Fred", > :last_name => "Flintstone", > :user_name => "fflintstone" > ) > assings[:repository] = @repository = [stub_model(Podcast, > :new_record? => false, > :name => "podcast1", > :host => "podcast.podcast.com", > > ), > stub_model(Podcast, > :new_record? => false, > :name => "podcast2", > :host => "podcast.podcast.com", > ), > stub_model(Podcast, > :new_record? => false, > :name => "podcast3", > :host => "podcast.podcast.com", > ) > ] > assigns[:subscription] = @subscription = > [ stub_model(Subscription, > :new_record? => false, > :user_id => 1, > :podcast_id => 1 > ), > stub_model(Subscription, > :new_record? => false, > :user_id => 1, > :podcast_id => 2 > )] > end > > then look to make sure that it renders all of the podcasts and the > ones that are subscribed subscribed checkbox is selected: > > It "should render the subscriber select form" do > render > > # now what? > > end > > > Thanks > > > Brian Colfer >I am going to go out on a limb... I would suggest, if you have, time, that you do some research on using Cucumber to express these specifications instead. These are precisely the kind of brittle view tests (smelled by the large amounts of mocking set up required) that I built loads of myself 9 months ago when I first started with RSpec (and before I discovered Cucumber) and have spent the last 6 months, once I''d learned better, dismantling again and replacing with much more flexible, readable, Cucumber features. Sorry, I know that''s not a direct answer to your question, but you might thank me for it eventually. If you want some help learning Cucumber, try these resources: http://cukes.info/ http://wiki.github.com/aslakhellesoy/cucumber Hope that helps. Matt Wynne http://blog.mattwynne.net http://www.songkick.com
Colfer, Brian
2009-Apr-21 08:50 UTC
[rspec-users] How would I spec this? --Rails subscriptions
Thanks Matt I''m fairly comfortable with cucumber and I have the acceptance tests. I''m looking to see if I can follow through on the BDD process. Sent from Brian''s iPhone On Apr 21, 2009, at 12:27 AM, "Matt Wynne" <matt at mattwynne.net> wrote:> > On 21 Apr 2009, at 00:34, Colfer, Brian wrote: > >> >> I have a set of users >> And a set of things ? podcasts >> Users should get a page that shows all of the podcassts with a >> check box >> If they are subscribed then the check box is checked >> >> Users table has first_name, last_name, user_name >> Podcats table has podcast_name, description, url >> Subscriptions table has user_id, podcast_id, subscription_type >> >> >> Would the view go in the subscription views? >> >> Is this a index view? >> >> >> How do I mock out the view? >> >> I think I want to spec something so that I set up three mock models >> for podcasts: >> >> >> before(:each) do >> assigns[:user] = @user = stub_model(User, >> :new_record? => false, >> :user_id => 1, >> :first_name => "Fred", >> :last_name => "Flintstone", >> :user_name => "fflintstone" >> ) >> assings[:repository] = @repository = [stub_model(Podcast, >> :new_record? => false, >> :name => "podcast1", >> :host => "podcast.podcast.com", >> >> ), >> stub_model(Podcast, >> :new_record? => false, >> :name => "podcast2", >> :host => "podcast.podcast.com", >> ), >> stub_model(Podcast, >> :new_record? => false, >> :name => "podcast3", >> :host => "podcast.podcast.com", >> ) >> ] >> assigns[:subscription] = @subscription = >> [ stub_model(Subscription, >> :new_record? => false, >> :user_id => 1, >> :podcast_id => 1 >> ), >> stub_model(Subscription, >> :new_record? => false, >> :user_id => 1, >> :podcast_id => 2 >> )] >> end >> >> then look to make sure that it renders all of the podcasts and the >> ones that are subscribed subscribed checkbox is selected: >> >> It "should render the subscriber select form" do >> render >> >> # now what? >> >> end >> >> >> Thanks >> >> >> Brian Colfer >> > > I am going to go out on a limb... > > I would suggest, if you have, time, that you do some research on > using Cucumber to express these specifications instead. These are > precisely the kind of brittle view tests (smelled by the large > amounts of mocking set up required) that I built loads of myself 9 > months ago when I first started with RSpec (and before I discovered > Cucumber) and have spent the last 6 months, once I''d learned better, > dismantling again and replacing with much more flexible, readable, > Cucumber features. > > Sorry, I know that''s not a direct answer to your question, but you > might thank me for it eventually. > > If you want some help learning Cucumber, try these resources: > http://cukes.info/ > http://wiki.github.com/aslakhellesoy/cucumber > > Hope that helps. > > Matt Wynne > http://blog.mattwynne.net > http://www.songkick.com > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users