这是我正在测试的类,包含在Foo.rb中:
class Foo
def bar
return 2
end
end
Run Code Online (Sandbox Code Playgroud)
这是我在Foo_spec.rb中包含的测试:
require "./Foo.rb"
describe "Foo" do
before(:all) do
puts "#{Foo == nil}"
Foo.any_instance.stub(:bar).and_return(1)
end
it "should pass this" do
f = Foo.new
f.bar.should eq 1
end
end
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
false
F
Failures:
1) Foo Should pass this
Failure/Error: Foo.any_instance.stub(:bar).and_return(1)
NoMethodError:
undefined method `any_instance_recorder_for' for nil:NilClass
# ./Foo_spec.rb:6:in `block (2 levels) in <top (required)>'
Finished in 0 seconds
1 example, 1 failure
Failed examples:
rspec ./Foo_spec.rb:9 # Foo Should pass this
Run Code Online (Sandbox Code Playgroud)
我已经咨询过doc,给出的例子就是传递我的机器(所以这对rspec代码来说不是问题),但它没有给我任何关于我可能做错的信息.错误消息也很混乱,因为它告诉我不要打电话.any_instance给nil:NilClass,但正如我用我的输出证明的那样,Foo不是nil.我该如何调用.any_instance.stub我的自定义对象?
我正在使用Ruby 1.9.3和rspec 2.14.5.
val*_*onm 27
你应该before(:each)用于存根.
before(:all)不支持存根.原因是在每个示例之后都清除了所有存根和模拟,因此任何设置的存根都before(:all)将在第一个在该组中运行的示例中工作,但不适用于任何其他存根.
从Rspec 3开始,any_instance不再定义.
现在使用:
allow_any_instance_of(Foo).to receive(:bar).and_return(1)
Run Code Online (Sandbox Code Playgroud)
此版本和旧版本的来源:https: //makandracards.com/makandra/2561-stub-methods-on-any-instance-of-a-class-in-rspec-1-and-rspec-2
| 归档时间: |
|
| 查看次数: |
7418 次 |
| 最近记录: |