2013-06-06 19 views
9

Nel mio test sto iniziando una nuova classe chiamata Package con alcuni parametri.Rspec - necessario per stubare File.open che viene chiamato in un altro file

Nell'inizializzazione di questa classe, apro un file che è disponibile sulle mie caselle remote ma non qualcosa che è comunemente lì localmente. Mi stavo chiedendo come avrei affrontato lo stub nel mio test.

Sto usando rspec e moka. Ho provato qualcosa di simile:

File.stubs(:open).with(:file).returns(File.open("#{package_root}/test_files/test.yml")) 

ho avuto questa linea prima ho inizializzato Package nel mio test.

ho ottenuto questo errore:

unexpected invocation: File.open('package/test_files/test.yml') 
    satisfied expectations: 
    - allowed any number of times, not yet invoked: File.open(:file) 

Io non sono che la familiarità con RSpec o moka, quindi l'aiuto è apprezzato. Grazie!

risposta

8

Non sono sicuro che sia necessaria la parte .with(:file), prova a rilasciarla del tutto. Inoltre, credo specificandolo in questo modo che stai letteralmente dicendo di aspettarti che qualcuno chiami quel metodo e lo trasmetta un simbolo :file anziché ad es. un nome di stringa. Considera anche precaricare il file di test YAML e proprio ritorno che:

let(:file_like_object) { double("file like object") } 

File.stub(:open).and_return(file_like_object) 
+0

I precaricato il YAML di prova e che ha funzionato. Grazie! –

11

La nuova sintassi per stub assomiglia a questo:

allow(File).to receive(:open).with('file_name').and_return(file_like_object)