nivel de stack rspec demasiado profundo

Cuando ejecuto las especificaciones de mi modelo y las especificaciones del controlador por separado, est√° bien. Cuando los ejecuto juntos, obtengo un desbordamiento de stack, literalmente ūüôā

$ bundle exec rspec --fail-fast spec/models ........ Finished in 0.44274 seconds 8 examples, 0 failures $ bundle exec rspec --fail-fast spec/controllers .. Finished in 0.99339 seconds 2 examples, 0 failures $ bundle exec rspec --fail-fast spec F Failures: 1) HerpController derp derp example Failure/Error: Unable to find matching line from backtrace SystemStackError: stack level too deep # /Users/jared/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.1/lib/abstract_controller/layouts.rb:359 Finished in 0.02241 seconds 1 example, 1 failure 

¬ŅC√≥mo puedo empezar a depurar esto? Gracias.

Al eliminar la mitad de mis especificaciones a la vez, surgió el problema. Supongo que este es un ejemplo de depuración bisect. Gracias a Frederick Cheung, cuyo comentario sugirió este enfoque.

Para la posteridad, este era el problema.

 include Rails.application.routes.url_helpers describe "Attendee#next_page" do end 

Al parecer, incluye ir dentro de la describe

 describe "Attendee#next_page" do include Rails.application.routes.url_helpers end 

Tengo mucho que aprender sobre rspec. ūüôā

Puede poner una statement del debugger en su c√≥digo y depurar de esa manera, o simplemente comenzar a usar el puts "got here" en los lugares de su c√≥digo que sabe que se est√°n ejecutando. Yo sugerir√≠a usar algo significativo en lugar de “llegar aqu√≠” tambi√©n ūüôā

Comenzar√≠a con las declaraciones de puts o raise en puntos clave de su c√≥digo para que pueda comenzar a reducir qu√© l√≠nea est√° causando el problema. Una vez que empiezas a acercarte, puedes comentar una l√≠nea a la vez para averiguar con qu√© l√≠nea desaparece el problema. Tan pronto como la hayas bajado a una l√≠nea, puedes averiguar qu√© est√° haciendo esa l√≠nea que Ruby no hace. ‘T como.

En t√©rminos generales de d√≥nde comenzar, “Nivel de stack demasiado profundo” suele ser un problema de bucle infinito o recursi√≥n infinita. Me imagino que algo est√° pasando cuando un modelo invoca un controlador que invoca al modelo, o viceversa. No hay forma de saberlo con certeza hasta que comience a comentar l√≠neas, pero cualquier lugar donde tenga llamadas a funciones pertenecer√° a su breve lista de sospechosos. ¬°Buena suerte!

Posiblemente puede obtener el error “No se puede encontrar la l√≠nea coincidente de la marcha atr√°s” en caso de que est√© comprobando alguna var que no se haya inicializado realmente

En este ejemplo, preste atención a la observación var que no se inicializa en el fragmento incorrecto

fragmento equivocado

 describe "GET index" do it "assigns all observations as @observations" do get :index, {}, valid_session assigns(:observations).should eq([observation]) end end 

Ejemplo fijo (línea 3)

 describe "GET index" do it "assigns all observations as @observations" do observation = Observation.create! valid_attributes get :index, {}, valid_session assigns(:observations).should eq([observation]) end end 

A veces dependemos del uso de let como inicializador, pero olvide agregarlo, por ejemplo,

 let(:observation) {FactoryGirl.create(:observation)}