Ich bin auf dieses Problem mit Tests gestoßen. Nehmen wir an, ich habe zwei Modelle, User und Post, wo user has_many: posts hat.Mocking ActiveRecord Beziehungsverhalten in RSpec-Tests
Ich versuche, einen Code-Block, der so etwas wie beinhaltet bis spec:
user = User.find(123)
post = user.posts.find(456)
Ich weiß, wie die User.find
und user.posts
Teile verspotten. Der user.posts
Mock gibt ein Array von Post-Objekten zurück. Und wenn es zum .find(456)
Teil kommt, bricht alles mit Ausnahme no block given
zusammen.
Also meine Frage hier ist: Was gebe ich als Ergebnis der user.posts
Mock, so dass .find(456)
Methode funktioniert es? User.first.posts.class
sagt, es ist Array, aber offensichtlich gibt es etwas mehr, dass die AR-Stil finden Anrufe funktionieren. Ich bin nicht überglücklich von der Aussicht, die Find-Methode für das zurückgegebene Objekt zu verspotten.
PS Bevor Sie vorschlagen, die offensichtliche und gute Antwort von aufhören zu verspotten und mit Fixtures/Seeding die Test-Datenbank mit den notwendigen Daten, hier ist das Catch: Legacy-Schema. Sowohl Benutzer als auch Post arbeiten oben auf Datenbankansichten, nicht auf Tabellen, und sie zu ändern, so dass sie Tabellen in der Testdatenbank sind, scheint mir falsch zu sein.
, dass die ‚hässliche‘ Art und Weise, die ich nicht tun wollte, aber Ihre Erwähnung Verband Proxy-Objekt 'gibt mir die Schlüsselwörter, die ich vermisste, und die Suche danach führten zu dem, wonach ich gesucht hatte, danke! –
@Toms, Wenn Ihre Lösung unter diesen Antworten eindeutig ist, könnten Sie vielleicht hinzufügen hinzufügen als eine andere Antwort. Ich würde gerne sehen, wie du es gelöst hast. –
Der hässliche Weg, verspottet Mocks. Ich war einfach glücklich, das herauszufinden - war nicht das erste Mal, dass ich diese Situation antraf, und es stört mich. –