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

Reply via email to