如何使用rspec访问实例变量

如何使用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,所以我这样写。
需要相对“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/

10-13 07:14