私のコマンドラインRubyプログラムには、コマンドが処理される前にインターネットに接続されているかどうかがチェックされています。プログラムの実際のチェックは(Socket :: TCPSocketを使用して)簡単ですが、統合テストのためにCucumberでこの動作をテストしようとしています。キュウリ試験でインターネット接続をシミュレートする最良の方法は何ですか?
コード:
def self.has_internet?(force = nil)
if !force.nil? then return force
begin
TCPSocket.new('www.yelp.co.uk', 80)
return true
rescue SocketError
return false
end
end
if has_internet? == false
puts("Could not connect to the Internet!")
exit 2
end
機能:
Scenario: Failing to log in due to no Internet connection
Given the Internet is down
When I run `login <email_address> <password>`
Then the exit status should be 2
And the output should contain "Could not connect to the Internet!"
私は明らかにテストに合わせて実装を変更したくない、と私はすべての私のシナリオにする必要がパス。明らかに実際に接続がない場合、テストはそのまま実行されますが、他のテストは接続が必要なため失敗します。
私の質問:これを有効な方法でテストし、すべてのテストに合格するにはどうすればよいですか?
これは、テストがメソッドをスタブしようとしたが、(コマンドラインスクリプト内で)まだ作成されていないため、機能しませんでした。私が実行時に 'Before'フックで常にfalseを返すように関数を編集し、' After'フックでそれを元に戻すような積極的なスタブです。 – xiy