RSpec を実行して、Web に接続している場合と接続していない場合の両方でコードをテストしたいと考えています。
残念ながら、アプリケーションにはライブ接続に依存するいくつかのテストがあります - 電子メールの送信、Facebook の統合など。
オンライン/オフラインのテスト環境を作成するためのベスト プラクティスの方法はありますか、それとも悪い方法ですか? これについてウェブ上で見つけることができるものがどれだけ少ないかから判断すると、後者だと思います。
RSpec を実行して、Web に接続している場合と接続していない場合の両方でコードをテストしたいと考えています。
残念ながら、アプリケーションにはライブ接続に依存するいくつかのテストがあります - 電子メールの送信、Facebook の統合など。
オンライン/オフラインのテスト環境を作成するためのベスト プラクティスの方法はありますか、それとも悪い方法ですか? これについてウェブ上で見つけることができるものがどれだけ少ないかから判断すると、後者だと思います。
通常、そのような状況では、アプリケーションの外部に接続するコードの部分をモックします。これにより、接続先のサービス/システムから期待される結果に対してテストできます。また、テストの実行も高速です。
ここに rspec を使ったモックに関する簡単なチュートリアルがありますが、自分でたくさん見つけることができると確信しています。
メールが送信されることをテストするには、ActionMailer 経由で送信している場合は別の方法があります。Rails testing guideにそのセクションがあります。
EDIT(コメントへの回答):TestHelper
オンラインのときにのみテストを実行する方法を入れることができます。何かのようなもの:
def when_online
if test_remote_connectivity
yield
else
puts "Skipping test offline."
end
end
次に、次のように呼び出すことができます。
def test_facebook
when_online do
.....
end
end
私はそれを完全に支持するかどうかはわかりませんが、それはあなたが望むことをするかもしれません!
リモート リソースに接続したくないテスト/仕様内でwebmockを使用できます。