我有一个这样的课程
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
这是一个spec文件。
require_relative' foo'
describe Foo do
let(:foo){ Foo.new}
describe "#run" do
context "when fails 30 times" do
foo.instance_variable_set(:@error_count, 30)
end
end
end
然后运行rspec foo_spec.rb
,然后失败并出现此错误。
foo_spec.rb:7:in `block (3 levels) in <top (required)>': undefined local variable or method `foo' for #<Class:0x007fc37410c400> (NameError)
如何在rspec中调用instance_variable_set
方法?
修改的
如果30次失败,我想调用send_error
方法。
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
send_error if @error_count >= 30
end
def send_error
end
end
用于测试连接失败30次时调用send_error
的spec文件。
require_relative 'foo'
describe Foo do
let(:foo){ Foo.new}
describe "#run" do
context "when fails 30 times" do
it "should send error" do
foo.instance_variable_set(:@error_count, 30)
expect(foo).to receive(:send_error)
end
end
end
end
答案 0 :(得分:0)
我不知道你要做什么,但我怀疑这不是正确的做法。
但是,您当前的问题是您不在测试环境中,因此foo
未定义。您希望将foo.instance_variable_set
包装在测试构造中 - it
或specify
块,before :each
或类似内容。