Hey ich versuche meine new
Aktion mit Rspec zu testen und ich laufe in einige Schwierigkeiten.Rails passing id zu rspec test
Hier ist die new
Aktion für meine scores_controller
Ein Ergebnis wird auch mit einer Website verbunden sein. Ein site
has_many
scores
und ein score
belongs_to
ein site
def new
@score = Score.new(site: Site.find(params['site_id']))
end
Hier ist mein rspec Test im Moment:
describe 'new' do
with :user
with :score
with :site
before do
sign_in user
get :new, id: site.id
end
it { expect(response).to have_http_status :ok }
it { should render_template :new }
it 'assigns a new score as @score' do
expect(assigns(:score)).to be_a_new(Score)
end
end
Und hier ist der Fehler, den ich
immer bin1) ScoresController new
Failure/Error: @score = Score.new(site: Site.find(params['site_id']))
ActiveRecord::RecordNotFound:
Couldn't find Site with 'id'=
# ./app/controllers/scores_controller.rb:19:in `new'
# ./spec/controllers/scores_controller_spec.rb:41:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:31:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:30:in `block (2 levels) in <top (required)>'
I wissen, id: site.id
ist falsch, aber ich kann nicht herausfinden, wie man es mit einemtestenIch bin auch wirklich neu bei Schienen, es tut mir so leid, wenn es super offensichtlich ist.
Hier ist mein Schema, wenn es gebraucht wird
create_table "scores", force: :cascade do |t|
t.integer "value", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "site_id"
t.string "response"
end
add_index "scores", ["site_id"], name: "index_scores_on_site_id", using: :btree
create_table "sites", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Edit:
Prefix Verb URI Pattern Controller#Action
root GET / sites#index
sites GET /sites(.:format) sites#index
POST /sites(.:format) sites#create
new_site GET /sites/new(.:format) sites#new
edit_site GET /sites/:id/edit(.:format) sites#edit
site GET /sites/:id(.:format) sites#show
PATCH /sites/:id(.:format) sites#update
PUT /sites/:id(.:format) sites#update
DELETE /sites/:id(.:format) sites#destroy
scores GET /scores(.:format) scores#index
POST /scores(.:format) scores#create
new_score GET /scores/new(.:format) scores#new
edit_score GET /scores/:id/edit(.:format) scores#edit
score GET /scores/:id(.:format) scores#show
PATCH /scores/:id(.:format) scores#update
PUT /scores/:id(.:format) scores#update
DELETE /scores/:id(.:format) scores#destroy
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
Unter der Annahme, dass Ihre Routen korrekt sind, müssen Sie zuerst eine Website in Ihrem Test erstellen. Also my_site = Site.create! (Site_attribute: attribute_value). get: new, id: my_site.id –
'mit: site' macht das schon – Spance
Was ist die Ausgabe von Rake-Routen? Ich vermute, dass Ihr Routing falsch sein könnte. Außerdem können Sie Ihre Assoziationen veröffentlichen. –