如何使用rspec访问实例变量

时间:2014-04-09 01:25:15

标签: ruby rspec

我有一个这样的课。

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

1 个答案:

答案 0 :(得分:2)

尝试@foo.send(:error_count)我想它应该有效。

更新:found in docs

expect{ foo.run }.to change{foo.instance_variable_get(:@error_count)}.from(0).to(1)