2013-06-06 11 views
9

W moim teście inicjuję nową klasę o nazwie Package z kilkoma parametrami.Rspec - trzeba uruchomić plik File.open, który jest wywoływany w innym pliku

Podczas inicjowania tej klasy otwieram plik dostępny w moich zdalnych polach, ale nie jest to coś, co jest powszechnie dostępne lokalnie. Zastanawiałem się, w jaki sposób chciałbym wykorzystać tę metodę w moim teście.

Używam rspec i mokka. Próbowałem coś takiego:

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

Miałem ten wiersz, zanim zainicjowałem Package w moim teście.

mam ten błąd:

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

nie jestem zaznajomiony z RSpec lub mocha, więc pomoc jest mile widziana. Dzięki!

Odpowiedz

8

Nie jestem pewien, czy potrzebujesz tej części .with(:file), spróbuj ją całkowicie upuścić. Wierzę również, że określając je w ten sposób, dosłownie mówisz, aby oczekiwał, że ktoś zadzwoni tą metodą i przekaże jej symbol, a nie np. nazwa pliku tekstowego. Weź również pod uwagę wstępne ładowanie pliku testowego YAML i po prostu powrocie, że:

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

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

I preinstalowanym na YAML testowy i że pracował. Dzięki! –

11

Nowe odcinki Składnia wygląda następująco:

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