2016-06-28 19 views
0

私はlocalhost:3000/api/guests/1に行っても私のショーページは表示されますが、仕様を実行しても合格しません。ここで経路指定は合格しませんが経路は正しく動作します

は私の仕様です:

it 'the resource is under the correct namespace' do 
    get '/api/guests/1' 
    expect(response).to be_success 
end 

ここに私のroutes.rbをです:

Rails.application.routes.draw do 
    namespace :api, defaults: { format: :json } do 
    resources :gifts, only: :show 
    resources :guests, only: [:index, :show] do 
     resources :gifts, only: :index 
    end 
    resources :parties, only: [:index, :show] 
    end 
end 

ここに私のRSpecの失敗メッセージです:

ActiveRecord::RecordNotFound: 
    Couldn't find Guest with 'id'=1 

私はどこを見れするのは非常にわからないんだけど問題のために。

答えて

1

ゲストオブジェクトを作成していないため、テストが失敗するため、テストは失敗します。 getに電話する前に、ゲストを作成する必要があります。ような何か:

user = Guest.create!(:username => "jdoe") 

そして、このようにそれを取得しよう:

get "/api/guests/#{user.id}" 

注意!テストデータベースは開発データベースと同じではありません。だから、おそらくあなたはdevでテストをしていないユーザーがいるでしょう。

+0

OKです。 これはショーページに正しい情報を表示します。 get '/ api/guests/1' expect(json ['name'])。to eq( 'John Smith') 期待しています(json ['age'])〜eq(45) expect(json ['favorite_color'])。to eq( 'Blue') end –

+0

私はすでに播種したものにrspecアクセスを与える必要がありますか?データベース? –

+0

いいえ、別々のDBを用意する必要があります。また、各テストの前に必要な変数を準備する必要があります。 Rspecのテストとその組織に関するブログ(https://robots.thoughtbot.com/how-we-test-rails-applicationsなど)を読んでください。テストを開始する前に、必要な変数を初期化して再利用するためのあらゆる種類の方法があります。 –

0

私は解決策を発見します。execすくいデシベルバンドル:

--traceシードRAILS_ENV =テストを、私はタイプミスは初めてで、このラインを走りました。おっとっと!

+1

おそらく、テスト用のデータを作成する別の方法です。しかし、私はそれをお勧めしません。それは速いが、維持するのは難しい。しかし、あなたの目的のために、確率は重要ではありません。 –

+0

そして、あなたの特定の質問に対して私の答えが間違っていたということではありません。 –

関連する問題