我有一个运行ssh会话的ruby脚本(scratch / ssh.rb):
require 'net/ssh'
require 'net/ssh/shell'
def try_process
Net::SSH.start('host', 'username', {:password=>'pwd'}) do |ssh|
end
end
我写了一个规范(spec / test_ssh.rb)如下:
require 'scratch/ssh'
describe 'SSH Tester' do
it "should work" do
try_process
end
end
我尝试按如下方式运行规范:
bundle exec rspec -I. spec/test_ssh.rb
得到以下结果:
Failures:
1) SSH Tester should work
Failure/Error: try_process
NoMethodError:
undefined method `timeout' for #<Net::SSH::Transport::Session:0x000000036d5288>
# ./scratch/ssh.rb:6:in `try_process'
# ./spec/test_ssh.rb:5:in `block (2 levels) in <top (required)>'
有趣的是,运行ssh.rb本身就成功了,所以我认为它与RSpec有关。
我试图查找net-ssh源代码并发现here它确实使用了'timeout',这似乎是一个合法的Ruby模块。
我怀疑这可能是因为rspec使用不同的/ cut版本的Ruby解释器来运行测试,但我不知道如何检查它。我在规范中试图put LOAD_PATH
,但它没有表现出任何可疑之处。
Ruby版本:1.9.3 Rspec版本:2.14.7 net-ssh版本:2.1.4
有没有人知道我需要挖掘哪些来解决这个问题?
非常感谢!
答案 0 :(得分:0)
为了它的价值,我试图重现你的问题,但却无法。
具体来说,以下代码:
require 'net/ssh'
require 'net/ssh/shell'
def try_process
Net::SSH.start('123.123.123.123', {}) do |ssh|
end
end
describe "" do
it "" do
try_process
end
end
产生了以下输出:
F
Failures:
1)
Failure/Error: Net::SSH.start('123.123.123.123', {}) do |ssh|
Errno::ETIMEDOUT:
Operation timed out - connect(2)
# ./tmp/so_spec.rb:5:in `try_process'
# ./tmp/so_spec.rb:11:in `block (2 levels) in <top (required)>'
Finished in 1 minute 15.69 seconds
1 example, 1 failure
Failed examples:
rspec ./tmp/so_spec.rb:10 #
表示timeout
方法仍可在RSpec块中访问。
此测试使用Ruby 2.0.0p247和RSpec 2.14.5
完成