Tengo controlador:
class AccountController < ApplicationController
def index
end
private
def current_account
@current_account ||= current_user.account
end
end
¿Cómo probar el método privado current_account
con rspec?
PD: uso Rspec2 y Ruby on Rails 3
ruby-on-rails
rspec
petRUShka
fuente
fuente
Respuestas:
Use #instance_eval
fuente
Yo uso el método de envío. P.ej:
Porque "enviar" puede llamar a métodos privados
fuente
.send
?¿Dónde se usa el método current_account? ¿Para qué sirve?
En general, no prueba los métodos privados, sino que prueba los métodos que llaman al privado.
fuente
Usted debe no a prueba sus métodos privados directamente, se puede y debe ser probado indirectamente, mediante el ejercicio del código de métodos públicos.
Esto le permite cambiar las partes internas de su código en el futuro sin tener que cambiar sus pruebas.
fuente
Puede hacer que sus métodos privados o protegidos sean públicos:
Simplemente coloque este código en su clase de prueba sustituyendo su nombre de clase. Incluya el espacio de nombres si corresponde.
fuente
fuente
Las pruebas unitarias de métodos privados parecen demasiado fuera de contexto con el comportamiento de la aplicación.
¿Estás escribiendo tu código de llamada primero? Este código no se llama en su ejemplo.
El comportamiento es: desea un objeto cargado desde otro objeto.
¿Por qué quieres escribir la prueba fuera de contexto a partir del comportamiento que deberías tratar de describir?
¿Este código se usa en muchos lugares? ¿Necesita un enfoque más genérico?
https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/controller-specs/anonymous-controller
fuente
Use la gema rspec-context-private para hacer que los métodos privados sean públicos dentro de un contexto.
Funciona agregando un contexto compartido a su proyecto.
Luego, si pasa
:private
como metadatos a undescribe
bloque, los métodos privados serán públicos dentro de ese contexto.fuente
Si necesita probar una función privada, cree un método público que invoque la privada.
fuente
Sé que esto es un poco hacky, pero funciona si quieres que los métodos sean verificables por rspec pero no visibles en prod.
Ahora, cuando puede ejecutar su especificación así:
fuente