2012-06-27 11 views
6

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?

+0

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. –

+0

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. –

+0

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. –

risposta

0
profile.chart.nil?  

non funziona?

+0

In che modo mi aiuta a scrivere un caso di test in cui l'oggetto non è stato caricato? –

Problemi correlati