私はRSpecに非常に慣れていません。Rails で作成している REST API のテストを書いています。API は、受け入れるリクエストの次の仕様を持つ 1 つのアクションで構成されます。
リクエストは、次の場合にのみ受け入れられます。
- HTTPSを使用して作成されています
- POSTリクエストとして送信されます
- 次のパラメーターで送信されます: value_name、value、item_id
たとえば、有効なリクエストは次のとおりです。
POST /new_api/action HTTPS/1.0
snip
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
value_name=Contract+Id&value=abcdef123456&item_id=38
仕様では、これらの要件を満たすリクエストが送信された場合、サーバーは200
コードで応答すると述べています。これらの要件を満たさないリクエストが送信された場合、サーバーは400
コードで応答します。
これらの要件により、リクエストが次のいずれかであるかに応じて、アクションが適切なコードで応答することを確認する RSpec テストを作成したいと思います。
- HTTP/SSL を使用して送信されます
POST
または別の要求タイプを使用して送信されます- 正しいパラメータがあります
これは、私が書きたいテストの 1 つの疑似 Ruby です。
describe 'New REST API' do
it 'should accept valid requests'
request = mock a request that
uses HTTPS
has these parameters: {:value_name => "name",\
:value => 1, :item_id => 2}
end
post name_of_new_action using request
response.status.should be(200)
end
end
RSpec の適切なフックは次のとおりです。
- リクエストをモックする
- リクエストを HTTPS/SSL 経由で「送信」する必要があるかどうかを示します
- サーバーに送信するパラメーターを指定します
- POST によるリクエストの送信をシミュレートする
- サーバーの応答コードを確認する
Rails 3.2.13 と Ruby 1.8.7 を使用しています (これは私たちが保守している古いアプリです)。私たちのGemfileには
gem 'rspec-rails', '~> 2.11.0'
gem 'guard-rspec', '~> 1.2.1'
gem 'capybara', '~> 1.1.2'
gem 'database_cleaner', '~> 1.1.1'
gem 'factory_girl_rails', '~> 1.7.0