2016-11-04 11 views
0

私は、外部サービスへの複数のhttp要求を呼び出すメソッドの単体テストを作成しています。RSpec HTTPスタブにカスケード規則を使用する方法はありますか?

それはインデックスルートを呼び出すことにより開始し、「http://api.com/things

そして、それは、インデックス内の各要素を通過すると「ショールート」を呼び出すと言う、それはあなたが見る「http://api.com/things/123

だと言います、 「ショー」ルートの最後には/123のみの違いがあります。

私はインデックスルート用のスタブを持っています。

WebMock::API.stub_request(
     :get, 
     /.*api\.com\/things.*/ 
    ).to_return(<something>) 

問題は、これが「show」ルートへの呼び出しを傍受することです。

「ショー」ルートに別のモックを作りたいと思います。私はこれを行う正規表現に飛び込む必要はありませんしたいと思います。

SinatraまたはRailsでルートが動作するのと同じ方法でhttpモックを設定する方法はありますか?言い換えれば、ファイル内で一致するものが上位にある場合、下位のものはヒットしません。

答えて

0

正規表現は複雑ではなく、相互排他的であるため、正常に動作するはずです。ショー

WebMock::API.stub_request(
     :get, 
     /.*api\.com\/things\/\d/ 
    ).to_return(<something>) 
+0

については

指標については

WebMock::API.stub_request( :get, /.*api\.com\/things$/ ).to_return(<something>) 

私の質問の答えが正しいの情報を与えられました。実際のアプリケーションコードが表示されないというのは私のせいですが、これを少し変更して動作させる必要がありました。 'to_return'はブロック(URLを渡す)を取ることができるので、' url.include?( "123") else 'のようなものを実行しました。 –

+0

さて、そうです、あなたの要求は 'show'と' index'の違いは違っていましたが、それは解決策がある限りクールです。 – SteveTurczyn

関連する問題