У меня есть статический метод, который инициирует статическую переменную, вызывая внешний вызов службы. Я хочу отключить этот вызов статического метода, чтобы внешний вызов службы не выполнялся при инициализации переменной класса. вот пример моего кода простыми словами.Как заглушить статические методы класса через rspec
class ABC
def self.ini
return someCallToMyExternalLibrary # i don't want the execution to go there while testing
end
@@config = self.ini
def method1
return @@config['download_URL']
end
end
Теперь я хочу незавершенный статический вызов метода с моим объектом, так что @@ конфигурация инициализируются с ответом, который я хочу получить. Я пробовал несколько вещей, и мне кажется, что @@ config не инициализирован моим объектом, а только реализованным вызовом.
describe ABC do
let(:myObject) { Util.jsonFromFile("/data/app_config.json")}
let(:ABC_instance) { ABC.new }
before(:each) do
ABC.stub(:ini).and_return(myObject)
end
it "check the download url" do
ABC_instance.method1.should eql("download_url_test")
# this test fails as @@config is not getting initialized with my object
# it returns the download url as per the implementation.
end
end
Я даже попытался Штюбинга в spec_helper с, однако, что это будет выполняться первым, прежде чем переменная класса инициализируется, когда выполнение достигает там, но это тоже не помогло. Я застрял с этим сейчас некоторое время. Кто-то, пожалуйста, будь Спасителем.
спасибо Питер, я тоже как-то понял, что с трудом! – manyu