ビルド中のRailsアプリケーションのリクエスト仕様書を作成しようとしていますが、ドキュメンテーションがまばらです(または正しいドキュメントがまだ見つかりません)。Railsインテグレーションテスト/ RSpecリクエスト仕様のURLパラメータを指定
私はいつものAPIエンドポイントのほとんどはcompanies
リソース持っている:私は私の仕様はログインしていないときは、これらのエンドポイントをヒットした場合、彼らはログインページにリダイレクトすることを示したい
# Routes -------------------------------------------------------------------
# companies GET /companies(.:format) companies#index
# POST /companies(.:format) companies#create
# new_company GET /companies/new(.:format) companies#new
# edit_company GET /companies/:id/edit(.:format) companies#edit
# company GET /companies/:id(.:format) companies#show
# DELETE /companies/:id(.:format) companies#destroy
# PATCH /companies/:id(.:format) companies#update
を。最初の3つのエンドポイント(:id
パラメータなしのもの)については、これは単純です:
RSpec.describe 'Companies Endpoints', type: :request do
context 'with anonymous user' do
it 'always redirects to sign-in page' do
get '/companies'
expect(response).to redirect_to(new_user_session_path)
post '/companies'
expect(response).to redirect_to(new_user_session_path)
get '/companies/new'
expect(response).to redirect_to(new_user_session_path)
end
end
エンドポイントがURLパラメータ(get '/companies/:id/edit'
)を含む要求の構文は何ですか?
RSpec.describe 'Companies Endpoints', type: :request do
let :company { FactoryGirl.create(:company) } # NOTE: this is new
context 'with anonymous user' do
it 'always redirects to sign-in page' do
...
get "/companies/#{company.id}/edit" # `company` is from the factory above
expect(response).to redirect_to(new_user_session_path)
...
end
end
が、これは「正しい」方法であれば、私は思っていた:これは私がこれまでに作ってみたものです。
具体的には、the request spec scenarios on relishapp.comは、POSTリクエストの一部としてオプションのハッシュを使用しています。このオプションのハッシュもURLパラメータにも適用されるのでしょうか?
RSpec.describe "Widget management", :type => :request do
it "creates a Widget and redirects to the Widget's page" do
post "/widgets", :params => { :widget => {:name => "My Widget"} }
...
私を次のように書き換えることができ** HTTP要求**(_e.g。、_ '')に対応して何が起こるかをリクエスト仕様で定義しなければならないということです。これはコントローラー仕様に適していますか? –
@RyanLueこれに従ってくださいhttps://relishapp.com/rspec/rspec-rails/docs/controller-specs これは正確にrpecを書くための最良の方法を示しています。 Cheers –
RSpec 3.5では[コントローラスペックは要求仕様に賛成できません](https://github.com/rspec/rspec-rails/issues/1838)。馬の口元からまっすぐに: "レールアプリで作業する人々に与えることができる最高のアドバイスは、コントローラスペックの代わりにリクエスト仕様を書くことです。私は2017年に新しいコントローラー仕様を匂いにすることを検討しています... " –