2016-06-28 18 views
0

Wenn ich zu localhost gehe: 3000/api/Gäste/1 Ich bekomme meine Show-Seite, aber wenn ich die Spezifikation ausführen, ist es nicht bestanden.Route Spec nicht passieren, aber Route funktioniert

Hier ist mein spec:

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

mein routes.rb hier:

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 

Hier Nachricht meiner RSpec failure:

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

Ich bin nicht ganz sicher, wo sie suchen für das Problem.

Antwort

1

Sie haben kein Guest-Objekt erstellt, daher schlägt der Test fehl, weil er nicht gefunden werden kann. Bevor Sie get anrufen, sollten Sie Ihren Gast erstellen. Etwas wie:

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

Und dann versuchen, es so zu erhalten:

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

Hinweis! Ihre Testdatenbank ist nicht mit Ihrer Entwicklungsdatenbank identisch. Also, höchstwahrscheinlich haben Sie diesen Benutzer im Entwickler, aber nicht im Test.

+0

OK, das funktioniert. Meine zweite Spezifikation ist das aber: es 'die Show-Seite zeigt die richtigen Informationen' tun bekommen '/ api/Gäste/1' erwarten (Json ['Name']). Zu eq ('John Smith') erwarten (json ['age']). to eq (45) expect (json ['favorite_color']). zu eq ('Blue') end –

+0

Gibt es etwas, was ich tun muss, um rspec Zugriff auf meine bereits gesetzten zu geben Datenbank? –

+0

Nein, Sie sollten separate DBs haben, und Sie müssen die benötigten Variablen vor jedem Test vorbereiten. Sie sollten einige Blogs über Rspec-Tests und ihre Organisation lesen, wie diese: https://robots.thoughtbot.com/how-we-test-rails-applications. Es gibt viele Möglichkeiten, die benötigte Variable zu initialisieren und wiederzuverwenden, bevor Sie mit den Tests beginnen. –

0

entdeckte ich die Lösung: bündeln exec rake db: Samen RAILS_ENV = test --trace

ich das erste Mal diese Zeile mit einem Tippfehler lief. Hoppla!

+1

Das ist wahrscheinlich eine andere Möglichkeit, Daten für Tests zu erstellen. Obwohl ich es nicht empfehlen würde. Es ist zwar schneller, aber schwieriger zu warten. Aber für Ihre Zwecke spielt es keine Rolle. –

+0

Und es bedeutet nicht, dass meine Antwort für Ihre spezielle Frage falsch war. –

Verwandte Themen