我正在使用Ruby 2.3.4和rspec 3.6.0.
我正在为一个使用的对象编写测试rand(10000..99999).我找不到任何文档rand来查看它所属的对象.我尝试了stubbing Kernel,Object和Random(见下文),但我的尝试都没有导致rand对象的存根.
allow(Kernel).to receive(rand).and_return(12345)
allow(Object).to receive(rand).and_return(12345)
allow(Random).to receive(rand).and_return(12345)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
Hol*_*ust 10
rand确实是在Kernel模块中实现的.但是,在代码中调用方法时,方法接收器实际上是您自己的对象.
假设以下课程:
class MyRandom
def random
rand(10000..99999)
end
end
my_random = MyRandom.new
my_random.random
# => 56789
Run Code Online (Sandbox Code Playgroud)
在调用时my_random.random,方法的接收器(即,调用该方法的对象)rand也是my_random实例,因为这是self该MyRandom#random方法中的对象.
测试时,您可以rand在此实例上存根方法:
describe MyRandom do
let(:subject) { described_class.new }
describe '#random' do
it 'calls rand' do
expect(subject).to receive(:rand).and_return(12345)
expect(subject.random).to eq 12345
end
end
end
Run Code Online (Sandbox Code Playgroud)
这有效:
allow_any_instance_of(Object).to receive(:rand).and_return(12345)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1741 次 |
| 最近记录: |