2017-05-28 13 views
0

私は、GETリクエストからデータベース(PostreSQL)の情報を送信するAPIのテストを書いています。 しかし私のRSpec GETリクエストは値を返すことを拒否します。Rspec GETリクエストが正しくデータベースから値を返さない

これはテストである:

describe FullTextController do 
    context 'when doing a simple search', :type => :request do 
    it 'return the correct results' do 
     create(:etablissement, nom: "foobarcompany") 
     create(:etablissement, nom: "foobarcompany2") 
     create(:etablissement, nom: "foobarcompany3") 
     create(:etablissement, nom: "foobarcompany4") 
     sleep 2 
     get "/full_text/:id", :params => { id: 'foobarcompany' } 

     expect(body_as_json).to match({ 
     total_results: 1, 
     total_pages: 1, 
     per_page: 10, 
     page: 1, 
     etablissement: 1, 
     }) 
    end 
    end 

このコントローラをテストすることになっている。

class FullTextController < ApplicationController 
    def show 

    page = params[:page] || 1 

    search = Etablissement.search do 
     fulltext params[:id] 
     paginate page: page, per_page: 10 
    end 

    results = search.results 

     results_payload = { 
     total_results: search.total, 
     total_pages: results.total_pages, 
     per_page: results.per_page, 
     page: page, 
     etablissement: results 
     } 

     render json: results_payload, status: 200 
    end 
    end 

    def full_text_params 
    params.permit(:id, :page) 
    end 
end 

のconfig/routes.rbをからのルート:

Rails.application.routes.draw do 
    get 'siret/:id' => 'siret#show' 
    get 'full_text/:id' => 'full_text#show' 
end 

出力からテスト:

 expected {"total_results"=>0, "total_pages"=>0, "per_page"=>10, "page"=>1, "etablissement"=>[]} to match {:total_results=>1, :total_pages=>1, :per_page=>10, :page=>1, :etablissement=>1} 
    Diff: 
    @@ -1,6 +1,6 @@ 
    -:etablissement => 1, 
    -:page => 1, 
    -:per_page => 10, 
    -:total_pages => 1, 
    -:total_results => 1, 
    +"etablissement" => [], 
    +"page" => 1, 
    +"per_page" => 10, 
    +"total_pages" => 0, 
    +"total_results" => 0, 

少なくとも1つの結果が見つかるはずですが、ゼロが表示され続けます。 私はすでに正しいテストデータベースにいて、作成されたモデル(etablissement)がデータベースに入っていることを確認しました。

+0

テストケースで 'binding.pry'を設定しようとしましたか?このテストケースはコントローラで 'etablissement'変数を選択するのに失敗していますか? –

+0

GETリクエストの直後に 'binding.pry'を追加してチェックしました。「応答」と入力すると空のレスポンスが得られます。もし' Etablissement.all'と入力するとnilを返します。私がテストコードでEtablissementのリクエストを行うと結果が得られます: 'puts Etablissement.first.name'は" foobarcompany "を返します 悲しいことに、前にbinding.pryを使用したことはありません。あなたは私に何を試してみるべきですか? –

+0

もし、 'create(:etablissement')を実行したときに' Etablissement'がテストDBに保存されないという問題があれば、デバッグに戻り、 'etablissement.errors.full_messages'をチェックし、レコードを保存するときにいくつかのエラーが発生する –

答えて

0

getコールは、full_text/:id:id部分を実際にidに置き換えて、次の構造に従う必要があります。 Railsはコントローラー内のパラメーターとしてid部分を考慮します。それは実際にURLの観点からのparam(のparamsは、後に何を来ている?、?param1=value1&param2=value2のような)ではありません

あなたはここでやっていることはあなたがget "/full_text/foobarcompany"代わりに

を使用したい /full_text/:id?id=foobarcompany

に変換get "/full_text/:id", :params => { id: 'foobarcompany' }です

関連する問題