0

我有一个方法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。我确定这里缺少一些东西,但我就是不知道它是什么。

4

2 回答 2

3

noecho方法关闭回显,然后生成流本身,但是您将其存根以生成字符串而不是 io 实例。结果gets在“some_pass”上被调用,这显然不起作用

你可以做

STDIN.stub(:noecho).and_return('some_pass')

或者

STDIN.stub(:gets).and_return('some_pass')

两者都应该STDIN.noecho(&:gets)返回所需的字符串。

于 2013-05-05T20:11:31.267 回答
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
于 2013-05-05T20:11:25.967 回答