2009-08-16 4 views
0

Ich bin ein Fan von Mocks und Stubs wo immer ich kann, um meine Spezifikationen schnell laufen zu lassen. Ich bin ein bisschen ratlos, wie ich dies tun könnte die find_special Methode in dem folgenden Test:So testen Sie Assoziationserweiterungslogik in Schienen mit minimalem DB-Overhead

has_many :foos do 
    def find_special 
     if proxy_owner.baz 
     ... find stuff 
     else 
     ... find other stuff 
     end 
    end 
    end 

ich dagegen hätte nicht mit der: extend => Modul Syntax für diese, aber ich don‘ Ich denke, es macht einen Unterschied.

Antwort

1

Fragen Sie, wie man eine Methode auf der proxy_owner stub? In diesem Fall ist es nicht das Objekt, das Sie anrufen foos an?

# in Mocha 
item.stubs(:baz).returns(true) 
item.foos.find_special # => find stuff 
item.stubs(:baz).returns(false) 
item.foos.find_special # => find other stuff 

Dies ist nicht getestet aber vielleicht wird es bekommen Sie schließen.

+0

Aber ich würde immer noch eine Menge Foo-Objekte machen und sie vor diesem Test in der Datenbank speichern müssen, oder? Ich suche nach einem Weg, wo ich testen könnte, dass die Methode find_special bewirkt, dass Foo.find mit den richtigen Parametern aufgerufen wird, ohne die Abfrage tatsächlich gegen die Datenbank ausführen zu müssen. –

+0

Kürzere Version: Ich weiß, wie man das mit Fabriken/Vorrichtungen testet - ich will sehen, ob ich es ohne sie machen kann. –

+0

Du kannst Items und Foos im Speicher erstellen: Item.new und item.foos.build. Keine Notwendigkeit, die Datenbank zu berühren. – ryanb