Rails pertenentes_ para pruebas
-
23-09-2019 - |
Pregunta
Tengo un modelo de propuesta que pertenece al proyecto:
class Proposal < ActiveRecord::Base
belongs_to :project
has_many :articles, :as => :document, :dependent => :destroy
has_many :sections, :through => :articles
# proposal has project - test/unit/proposal_test.rb
validates_presence_of :project_id
end
La ruta que configuré para mostrar este disco es "http: //domain.tld/projects/project-id/proposal", a través de esta línea en rutas.rb -" map.resources: proyectos ,: has_one =>: propuesta "
Ahora quiero probar esto a través de propuestas_controller_test.rb.
test "should show proposal" do
get :show, :id => proposals(:one).to_param
assert_response :success
end
Sin embargo, la "prueba de rastrillo" sigue diciéndome esto, y no tengo idea de cómo solucionarlo. Probablemente sea realmente fácil para ustedes, pero nuevos para mí.
1) Error:
test_should_show_proposal(ProposalsControllerTest):
ActiveRecord::RecordNotFound: Couldn't find Project without an ID
app/controllers/proposals_controller.rb:18:in `show'
/test/functional/proposals_controller_test.rb:34:in `test_should_show_proposal'
Aquí está mi lógica de show de controlador:
# should show proposal - test/functional/proposals_controller_test.rb
def show
@project = Project.find(params[:project_id])
@proposal = @project.proposal
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @proposal }
end
end
Un viaje rápido a "Script/Consola" rendimiento:
Loading development environment (Rails 2.3.4)
>> t = Project.first
=> #<Project id: 1, name: "Test">
>> t.proposal
=> #<Proposal id: 2, active: true, project_id: 1>
Mientras que la "prueba de script/consola" muestra:
Loading test environment (Rails 2.3.4)
>> t = Project.first
=> #<Project id: 298486374, name: "Test">
>> t.proposal
=> nil
¿Qué pasa con esa idiota loca?!?! ¡Ayúdame a conectar asociaciones en la prueba env!
Solución
Esto es lo que estaba mal.
Asociaciones automáticas en accesorios Ruby on Rails
http://ar.rubyonrails.org/classes/fixtures.html
- Consulte la sección sobre "Referencias de etiqueta para asociaciones (pertenencias_to, has_one, has_many)"
Aquí está otro Explicación opcional...
Esencialmente, debe montar con sus accesorios algunos y eliminar el _id de las claves extranjeras para que las asociaciones funcionen (por extraño que parezca). Los artículos lo explican todo. Después de rtfm, todo comenzó a funcionar perfectamente. Solo necesitaba saber dónde mirar. ¡No olvides "Rastrar DB: Test: Prepare" y "Prueba de rastrillo" primero!
Otros consejos
Primero noté que la cosa es que su controlador está utilizando el param 'Project_ID' y su prueba está pasando un parámetro de 'ID'. Por lo tanto, su llamada de búsqueda buscará con 'nulo' en el controlador, lo que probablemente causará el error que vea.
Params es solo un hash, y en realidad puede pasar el hash Params en su llamada de espectáculo. Si desea que haya un valor para un campo 'Project_ID', puede agregarlo fácilmente. por ejemplo:
get :show, { :project_id => proposals(:one).project_id }
Pruebe algo en ese sentido y debería poder obtener el Project_ID correcto al controlador. Rails debe saber que el hash que se está pasando al final es el hash de Params y lo creará para sus controladores en consecuencia.