2015-03-24 5 views
1

У меня есть следующий код ruby, который я пытаюсь проверить с помощью rspec.rspec: как проверить ssh.scp

begin 
Net::SSH.start(server_ip, server_username, :password => server_password) do |ssh| 
    ssh.scp.upload!(local_file, remote_file) 
    ssh.exec!("some command") 
    ... more ssh.exec! 
end 
rescue 
    puts "Failed to SSH" 
end 

и мой RSpec выглядит следующим образом:

ssh_mock = double 

expect(SSH).to receive(:start).and_yield(ssh_mock) 
expect(ssh_mock).to receive(:scp) 
expect(ssh_mock).to receive(:exec!).with("some command") 

Проблема заключается в том, что тест никогда не проходит, потому что он прыгает на помощь, когда она достигает УПП и scp.upload никогда не проверялись должным образом.

Итак, есть ли способ протестировать scp.upload, когда он вызывается аналогично этому примеру?

До сих пор единственным способом, которым я смог протестировать SCP, является отдельный блок. exp

Net::SCP.start(server_ip, server_username, :password => server_password) do |scp| 
    scp.upload!(local_file, remote_file) 
end 

Но могу ли я проверить его, не отделяя SCP от SSH так же, как в первом примере?

ответ

1

Я считаю, что вы должны также дразнить scp вернулся из ssh.scp, что-то вроде этого:

ssh_mock = double 
scp_mock = double('scp') 

expect(SSH).to receive(:start).and_yield(ssh_mock) 
expect(ssh_mock).to receive(:scp).and_return(scp_mock) 
expect(scp_mock).to receive(:upload!).with(local_file, remote_file) 
expect(ssh_mock).to receive(:exec!).with("some command") 
+0

работал отлично! Благодарю. – Noushad11