0

今、私はメソッドが呼び出されると断言します:

コード:

def MyClass
  def send_report
    ...
    Net::SFTP.start(@host, @username, :password => @password) do |sftp|
      ...
    end
    ...
  end
end

テスト:

it 'successfully sends file' do
  Net::SFTP.
    should_receive(:start).
    with('bla.com', 'some_username', :password => 'some_password')

  my_class.send_report
end

ただし、Net :: SFTP.startが呼び出されたときに、特定の条件が真であることも確認したいと思います。どうすればこのようなことができますか?

it 'successfully sends file' do
  Net::SFTP.
    should_receive(:start).
    with('bla.com', 'some_username', :password => 'some_password').
    and(<some condition> == true)

  my_class.send_report
end
4

3 に答える 3

1

should_receiveメソッドが呼び出されたときに実行されるブロックを に提供できます。

it 'sends a file with the correct arguments' do
  Net::SFTP.should_receive(:start) do |url, username, options|
    url.should == 'bla.com'
    username.should == 'some_username'
    options[:password].should == 'some_password'
    <some condition>.should be_true
  end

  my_class.send_report
end
于 2012-11-29T07:34:06.007 に答える
0

ありがとう@rickyrickyrice、あなたの答えはほぼ正しかったです。問題は、 に渡された正しい数の引数を検証しないことNet::SFTP.startです。これが私が最終的に使用したものです:

it 'sends a file with the correct arguments' do
  Net::SFTP.should_receive(:start).with('bla.com', 'some_username', :password => 'some_password') do
    <some condition>.should be_true
  end

  my_class.send_report
end
于 2012-11-29T07:51:55.177 に答える
0

あなたは期待することができます

it 'successfully sends file' do

Net::SFTP.
    should_receive(:start).
    with('bla.com', 'some_username', :password => 'some_password')

  my_class.send_report
end

it 'should verify the condition also' do
  expect{ Net::SFTP.start(**your params**)  }to change(Thing, :status).from(0).to(1)  
end
于 2012-11-29T07:28:45.220 に答える