我有一个方法auth
,我想存根 STDIN。
def auth
...
@pass = STDIN.noecho(&:gets).chomp
...
end
我试过STDIN.stub(:noecho).and_yield('some_pass')
了,收到了NoMethodError: private method 'gets' called for "some_pass":String
。我确定这里缺少一些东西,但我就是不知道它是什么。
该noecho
方法关闭回显,然后生成流本身,但是您将其存根以生成字符串而不是 io 实例。结果gets
在“some_pass”上被调用,这显然不起作用
你可以做
STDIN.stub(:noecho).and_return('some_pass')
或者
STDIN.stub(:gets).and_return('some_pass')
两者都应该STDIN.noecho(&:gets)
返回所需的字符串。
你真的想屈服于'some_pass'
障碍吗?或者你只是想存根返回值?
我相信你只是想获得返回值。尝试使用and_return
或通过传递哈希来存根的简写方法:
def auth
STDIN.noecho(&:gets).chomp
end
describe "Stubbing STDIN" do
it do
STDIN.stub(noecho: "some_pass")
expect(auth).to eq "some_pass"
end
end