我有一个静态方法,它通过进行外部服务调用来启动一个静态变量。我想存根该静态方法调用,以便在初始化类变量时不进行外部服务调用。这是我的代码的简单示例。
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。我已经尝试了几件事,我似乎没有用我的对象初始化@@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 中存根,尽管它会在执行到达那里时初始化类变量之前首先执行,但这也没有帮助。我现在坚持了一段时间。请有人成为救世主。