Arthur, You're right, I only test for NotFound. That's mainly because I really forgot about InternalServerError in the first place :)
Looking at http://github.com/sam/dm-core/tree/master/lib/dm-core/resource.rb#L300 http://github.com/sam/dm-core/tree/master/lib/dm-core/repository.rb#L79 it seems, that destroying a new_record? returns false, and any kind of database error would also return false. I guess some kind of foreign key error or something could be a reason? Anyway, I think all you need to do is provoke this behaviour in your request (i.e. convince datamapper's Resource#destroy to return fals/nil), and then test for response.status.should == 500 cheers snusnu On Sun, Dec 14, 2008 at 06:16, Arthur Zapparoli <[email protected]> wrote: > > 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 -~----------~----~----~----~------~----~------~--~---
