我目前正在为已编写的项目代码编写rspec测试。 我试图测试的代码如下:
def foo (ip, user)
#[...]
result = ""
Net::SSH.start(ip, user) do |session|
result = session.exec!('some_command_in_linux')
end
#[...]
end
我想要完成的是通过SSH将结果的分配与远程命令的执行分配,从而将假字符串分配给结果变量。
我已阅读 yield matchers ,但尚未成功将其应用于我的方案。
更具体地说,我在想:
expect {|block| Net::SSH::start(ip, user, &block).to receive(ip, user, &block).and_return(sample_output)}
有什么想法吗?
答案 0 :(得分:0)
如果您不需要阻止实际运行 - 只需忽略它。它不会运行,但它会被安全地忽略:
expect(Net::SSH).to receive(:start).with(ip, user).and_return(sample_output)
如果你做希望块运行,请使用and_yield
:
session = double(:session).as_null_object
expect(Net::SSH).to receive(:start).with(ip, user).and_yield(session).and_return(sample_output)
如果您希望session
对象以某种方式运行,您可以expect
来执行操作:
session = double(:session)
expect(Net::SSH).to receive(:start).with(ip, user).and_yield(session)
expect(session).to receive(:exec!).with('some_command_in_linux').and_return(sample_output)