我有一个方法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
。我确定这里缺少一些东西,但我无法弄清楚它是什么。
答案 0 :(得分:3)
noecho
方法关闭echo然后产生流本身,但是你将它存根以产生一个字符串而不是io实例。因此,在{some_pass'上调用gets
显然无法正常工作
你可以做到
STDIN.stub(:noecho).and_return('some_pass')
或者
STDIN.stub(:gets).and_return('some_pass')
两者都应导致STDIN.noecho(&:gets)
返回所需的字符串。
答案 1 :(得分:1)
你想真正屈服于'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