2017-03-13 18 views
1

私は現在、Rails(4.1.8)に関するプロジェクトをまとめています.APIルートをテストするためのRSpec要求仕様の作成を試みています。しかし不思議にも、テストを実行すると空の応答が返ってくるようですが、Postmanで直接要求するとjsonデータが期待どおりに返されます。RSpec要求仕様テストは常に空の応答を返します

要求スペック:

# spec/requests/tasks_spec.rb 
require 'rails_helper' 

RSpec.describe 'Tasks API', type: :request do 
    render_views 
    describe 'GET /tasks' do 
    it 'returns tasks' do 
     headers = { 
     "ACCEPT" => "application/json" 
     } 
     get '/tasks', headers 
     puts "Response: #{response}" 
     expect(response.content_type).to eq("application/json") 
     expect(json).not_to be_empty 
    end 
    end 
end 

結果:

class TasksController < ApplicationController 
    before_action :set_task, only: [:show, :update, :destroy] 

    # GET /tasks 
    def index 
    @tasks = Task.all 
    json_response(@tasks) 
    end 

応答懸念:

module Response 
    def json_response(object, status = :ok) 
    render json: object, status: status 
    end 
end 
を次のように

Failure/Error: expect(json).not_to be_empty 
     expected `[].empty?` to return false, got true 

タスクコントローラが設定され

仕様のサポート:私はrende_views修正について話同様の質問を読んでいた

module RequestSpecHelper 
    # Parse JSON response to ruby hash 
    def json 
    JSON.parse(response.body) 
    end 
end 

- 私は効果なしとすることを追加しましたし、また、私は彼らのように要求仕様を使用するときにこれらを必要としなかったと思ったが完全なスタックを実行する必要がありますか?誰もが、いくつかの光を放つことができる、非常に新しい仕様を要求し、少し戸惑う。

+2

'puts"すべてのタスクを追加してください:#{Task.count} "'出力をチェックして、あなたのテストデータベースが空であることを確信しています。 –

答えて

0

DBにはtasksがありません。そのため、空の配列を返しています。

indexアクションを呼び出す前にtaskを作成する必要があります。

あなたがTaskためfacatory_girl_rails宝石を使用してファクトリを作成することができたり、indexアクションを呼び出す前にTasksControllercreateアクションを呼び出すことができます次のいずれか

# spec/requests/tasks_spec.rb 
require 'rails_helper' 

RSpec.describe 'Tasks API', type: :request do 
    render_views 
    describe 'GET /tasks' do 
    before do 
     FactoryGirl.create(:task) 
    end 
    it 'returns tasks' do 
     headers = { 
     "ACCEPT" => "application/json" 
     } 
     get '/tasks', headers 
     puts "Response: #{response}" 
     expect(response.content_type).to eq("application/json") 
     expect(json).not_to be_empty 
    end 
    end 
end 

リファレンスFactoryGirl(工場の定義): https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#defining-factories

関連する問題