0

私は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 の適切なフックは次のとおりです。

  1. リクエストをモックする
  2. リクエストを HTTPS/SSL 経由で「送信」する必要があるかどうかを示します
  3. サーバーに送信するパラメーターを指定します
  4. POST によるリクエストの送信をシミュレートする
  5. サーバーの応答コードを確認する

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
4

1 に答える 1