Martin, Correct me if I'm wrong, but, in your tests: you just test the DELETE if there's no record. Right? So, it raises NotFound and return a 404 status.
http://github.com/snusnu/merb_resource_controller/tree/master/spec/mrc_test_app/spec/request/comments_spec.rb#L209 But, there's two kind of failures in this case: - A record exists - No record exists (or, no record could be found with this ID) You are testing the latter, and I want to test the former. Here's my controller (same code merb-gen gives me): def destroy(id) @foo = Foo.get(id) raise NotFound unless @foo if @foo.destroy redirect resource(:foos) else raise InternalServerError end end I wan't to test the raise InternalServerError case. I already have specs for the raise NotFound line. And without any mocks. :) Arthur Zapparoli http://merb-br.org http://arthurgeek.net On Sun, Dec 14, 2008 at 3:01 AM, Martin Gamsjaeger <[email protected]> wrote: > > Arthur, > > I forgot to mention that the default controllers that get generated by > merb-gen resource don't return NotAcceptable (406) on failing > requests. You will have to add that yourself to the actions in > question. Again, have a look at > http://github.com/snusnu/merb_resource_controller/tree/master/lib/merb_resource_controller/actions.rb > to see how I do that. Basically, it boils down to providing the > appropriate :status option to render/display > > cheers > snusnu > > On Sun, Dec 14, 2008 at 05:57, Martin Gamsjaeger <[email protected]> wrote: >> Hey Arthur, >> >> Have a look at the specs inside >> http://github.com/snusnu/merb_resource_controller/tree/master to see >> how I do this. Not sure if that's the best, but it basically relies on >> returning appropriate HTTP status codes so it should be quite ok. >> >> cheers >> snusnu >> >> On Sun, Dec 14, 2008 at 04:27, Arthur Zapparoli <[email protected]> wrote: >>> >>> In my sucessfull DELETE, there's no mock. In fact, I don't use mocks >>> on all of my other tests. I know how this can make my tests brittle. >>> >>> But I couldn't figure how to test this: "if anything goes wrong with >>> the DELETE, raise InternalServerError" without mocking. >>> >>> And, merb-gen do not creates tests for failing. It only create tests >>> for successful delete. >>> >>> Arthur Zapparoli >>> http://merb-br.org >>> http://arthurgeek.net >>> >>> On Sun, Dec 14, 2008 at 12:52 AM, Tony Mann <[email protected]> wrote: >>>> You don't need to use mocks. To see how to do what you want, use merb-gen >>>> resource_controller to make controller, and then look at its specs. The >>>> specs use pure CRUD to create and delete resources, making it a more >>>> realistic test of the system. >>>> >>>> The merb community frowns on mocks, and once you ditch them, you will see >>>> why. Suddenly your tests fail when the actual system fails! >>>> >>>> ..tony.. >>>> >>>> On Sat, Dec 13, 2008 at 2:25 PM, Arthur Zapparoli <[email protected]> >>>> wrote: >>>>> >>>>> Hi everyone, >>>>> >>>>> How to test a failing request on my controllers? >>>>> >>>>> Eg: I want to test a sucessfull DELETE, and a failing DELETE too. >>>>> >>>>> I did this using mocks, but I wan't to know if there's any othr way to >>>>> test this. >>>>> >>>>> Here's my code: >>>>> >>>>> describe "a failing DELETE", :given => "a foo exists" do >>>>> >>>>> before(:each) do >>>>> Foo.should_receive(:get).and_return(@foo = Foo.first) >>>>> @foo.should_receive(:destroy).and_return(false) >>>>> end >>>>> >>>>> it "do not deletes the foo from the database" do >>>>> lambda { delete_neighborhood(Foo.first) }.should_not change { >>>>> Foo.count } >>>>> end >>>>> >>>>> it "raises a 500 InternalServerError" do >>>>> @response = delete_neighborhood(Foo.first) >>>>> @response.status.should == 500 >>>>> end >>>>> end >>>>> >>>>> And, controller: >>>>> >>>>> def destroy(id) >>>>> @foo = Foo.get(id) >>>>> raise NotFound unless @foo >>>>> if @foo.destroy >>>>> redirect resource(:foos), :message => {:notice => "Foo >>>>> sucessfully deleted"} >>>>> else >>>>> raise InternalServerError >>>>> end >>>>> end >>>>> >>>>> >>>>> Arthur Zapparoli >>>>> http://merb-br.org >>>>> http://arthurgeek.net >>>>> >>>>> >>>> >>>> >>>> > >>>> >>> >>> >> >>> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "merb" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/merb?hl=en -~----------~----~----~----~------~----~------~--~---
