On 4.12.2007, at 18.19, Al Chou wrote: > Going back to my original message, I have the following at the > beginning of the download method: > > def download > @orders = Order.find( params[:ids] ) > ... > > The problem is that params[:ids], although built as an Array object > by the view that calls the download method on the controller, is > passed as a /-delimited string of id values.
If I set <%= link_to "Test", :controller => "clients", :foo => [1, 2, 3, 4, 5] %> I get this as the url: http://localhost:3000/en/clients?foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&foo%5B%5D=4&foo%5B%5D=5 That will get correctly parsed back to an array in the receiving action: Parameters: {"action"=>"index", "foo"=>["1", "2", "3", "4", "5"], "controller"=>"clients", "locale"=>"en"} This is Edge Rails, though, so YMMV. > Order.find() will not do the desired thing with that string, which > was intended to be an array by the view, but Rails passed it in a > string representation. So the method really should be > > def download > @orders = Order.find( params[:ids].split( '/' ) ) > > and what I'm trying to spec is the addition of the call to split(). IMHO there's no need to stub string methods like that. Just do something like this: Order.should_receive(:find).with(%w(1 2 3)).and_return(@some_order_objects) If params[:ids] is "1/2/3", you can be pretty certain that split("/") will work correctly so you're more interested in that the find method gets called with correct set of attributes, an array. It's not really interesting how that array got to be. In this case, you might notice that somehow params[:ids] is an array after all and you can take the split call away, and the spec will still pass. I guess what I'm trying to say is that the split call is part of the controller action's internal implementation, and you should be spec'ing how it behaves related to its surrounding world: fetches stuff from the business model, assigns objects for the view etc. //jarkko -- Jarkko Laine http://jlaine.net http://dotherightthing.com http://www.railsecommerce.com http://odesign.fi _______________________________________________ rspec-users mailing list [email protected] http://rubyforge.org/mailman/listinfo/rspec-users
