我有一节这样的课。
require 'net/http'
class Foo
def initialize
@error_count = 0
end
def run
result = Net::HTTP.start("google.com")
@error_count = 0 if result
rescue
@error_count += 1
end
end
如果连接失败,我想计算一下
@error_count
,所以我这样写。需要相对“foo”
describe Foo do
before(:each){@foo = Foo.new}
describe "#run" do
context "when connection fails" do
before(:each){ Net::HTTP.stub(:start).and_raise }
it "should count up @error_count" do
expect{ @foo.run }.to change{ @foo.error_count }.from(0).to(1)
end
end
end
end
然后我得到了这个错误。
NoMethodError:
undefined method `error_count' for #<Foo:0x007fc8e20dcbd8 @error_count=0
如何使用Rspec访问实例变量?
编辑
describe Foo do
let(:foo){ Foo.new}
describe "#run" do
context "when connection fails" do
before(:each){ Net::HTTP.stub(:start).and_raise }
it "should count up @error_count" do
expect{ foo.run }.to change{foo.send(:error_count)}.from(0).to(1)
end
end
end
end
最佳答案
我想应该可以。
更新:found in docs
expect{ foo.run }.to change{foo.instance_variable_get(:@error_count)}.from(0).to(1)
关于ruby - 如何使用rspec访问实例变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22951186/