今現在以下のようにテストを書いています。正常系と、異常系でcontextを分けています。
質問
get '/api/books'
というのが、itやexampleのブロック中じゃないと使えないらしく
ステータスコード200を返す
というテストと、正しい数のデータを返す
というテストのそれぞれの中でget '/api/books'
を実行しています。
これを共通化するような手段はございますでしょうか?
RSpec.describe BooksController, type: :request do let!(:stores) { FactoryBot.create_list(:book, 10) } describe '#index' do context 'リクエストが成功した場合' do it 'ステータスコード200を返す' do get '/api/books' expect(response).to have_http_status(:ok) end it '正しい数のデータを返す' do get '/api/books' json = JSON.parse(response.body) expect(json.length).to eq(stores.length) end end context 'URLが存在しない場合' do it 'ステータスコード404を返す' do get '/api/wrong_path' expect(response).to have_http_status(:not_found) end end end end
以下のように、1つのテストの中に複数のアサーションを入れればいけますが、基本的に1テスト=1アサーションにしたいのでこれは避けたいと思います。
it '正しいレスポンスを返す' do get '/api/books' json = JSON.parse(response.body) expect(response).to have_http_status(:ok) expect(json.length).to eq(stores.length) end
※その他、質問以外の箇所でご指摘等あれば、いただけますと幸いでございます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。