Sto tentando di affermare, utilizzando RSpec, che una determinata query Mongoid sarà non caricare il record, basta verificare la sua esistenza, perché il record è grande (diversi MB) e il codice deve solo sapere se o non esiste il record.Come posso testare il tipo di query generata da Mongoid?
Ho giocato con .exists?
sulle associazioni, ma per qualche ragione che non sembra funzionare con has_one
quali:
class Profile
include Mongoid::Document
has_one :chart
end
class Chart # this is heavy
include Mongoid::Document
belongs_to :profile
end
profile.chart.exists? # fails if chart returns nil
Il metodo exists?
delega a quanto pare non funziona per has_one
relazioni; sebbene sia documentato per has_many
. Voglio creare il mio, ma ho bisogno di testare in RSpec che in effetti il record viene interrogato solo non caricato. Sto pensando di fare qualcosa come test per la query sottostante generata al driver Mongo, come si può fare con .to_sql
. Esiste un metodo Mongoid corrispondente?
Probabilmente si vorrà stubare la parte di Mongoid che gestisce la trasformazione di una risposta BSON in un documento, quindi assicurarsi che non venga chiamata. –
Hai ricevuto uno snippet di codice per me? Speravo in qualcosa di analogo a .to_sql in Arel. Sono sicuro che sia lì da qualche parte nel Ciclomotore. –
Non conosco bene Mongoid/Ciclomotore, purtroppo (mantengo MongoMapper). Se vuoi un equivalente to_sql, devi controllare i tuoi 'Mongoid :: Criteria' prima che vengano trasformati nel documento. Il trucco sarà quello di metterlo tra le mani prima che il criterio venga effettivamente eseguito come una query. –