Thats great advice and now that you've pointed it out it seems so obvious. Thanks Matt. See you at Cukeup!
Sid On 19 March 2011 22:11, Matt Wynne <m...@mattwynne.net> wrote: > > On 19 Mar 2011, at 17:49, Sid Wood wrote: > > Thanks Ken, but when I said I was new to RSpec I didn't mean I was THAT > new! ;o) > > I think people aren't grasping the DataMapper chaining that is at the root > of my testing confusion. I managed to come up with a solution that I've > outlined here http://pastie.org/1690040 > > Basically, I mocked out a couple DataMapper::Collections and nested them. > I'd love to hear if anyone would have tackled this issue differently. > > > Yes, I would have listened to the tests here, and heard that the interface > to my model was awkward. > > I would either override Widget#all, or create a new method on the Widget > that simply takes the params hash (or the three specific params new, name > and materials) and figures out what to fetch from the database and returns > it. You have data access concerns leaking out into your controller, which is > why the interface is awkward to mock. > > > > On 18 March 2011 18:01, Ken Chien <ken.ch...@gmail.com> wrote: > >> When calling get/post/etc, the second optional parameter is a hash >> representing the "params" hash. >> >> So, in order to test the conditional(s) in your controller, you should >> write: >> get :index, :alpha => true #test the first conditional >> >> In another example, pass in :beta => true like this: >> get :index, :beta => true >> >> HTH, >> Ken >> >> >> 2011/3/18 Sid Wood <sidwo...@gmail.com> >> >>> Thanks for the replies guys. >>> >>> My problem is writing a test for >>> >>> @widgets = @widgets.by_alpha(params[:alpha]) >>> >>> DataMapper allows you to chain additional criteria on an existing query >>> and doesnt execute that query until in is used in the view. So the above >>> statement gets baked into the previous default query @widgets = >>> Widget.all(:order => [ :name.asc ]). >>> >>> I'd just like to write a test that confirms the controller is in fact >>> calling @widgets.by_alpha(params[:alpha]) when the params[:alpha] is >>> present. >>> >>> Here is the code again so you don't have to scroll to see it >>> >>> >>> def index >>> @widgets = Widget.all(:order => [ :name.asc ]) >>> if params[:alpha] >>> @widgets = @widgets.by_alpha(params[:alpha]) >>> elsif params[:beta] >>> @widgets = @widgets.by_beta(params[:beta]) >>> end >>> end >>> >>> Just to recap, this code is valid and works, I just don't know how to >>> write a test for it. >>> >>> Cheers, >>> >>> Sid >>> >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-users@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >>> >> >> >> _______________________________________________ >> rspec-users mailing list >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > > > cheers, > Matt > > m...@mattwynne.net > 07974 430184 > > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users