私のコマンドライン 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!"
テストに合わせて実装を変更したくないことは明らかであり、すべてのシナリオに合格する必要があります。明らかに、実際に接続がない場合、テストはそのまま成功しますが、他のテストは接続が必要なため失敗します。
私の質問: これを有効な方法でテストし、すべてのテストに合格するにはどうすればよいですか?