我有一个这样的课。
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
,所以我这样写了。
require_relative' 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
答案 0 :(得分:2)
尝试@foo.send(:error_count)
我想它应该有效。
expect{ foo.run }.to change{foo.instance_variable_get(:@error_count)}.from(0).to(1)