¿Cómo probar acciones con los trabajadores de cola? -- ruby-on-rails campo con ruby campo con rspec campo con resque camp Relacionados El problema

How to test actions with queue workers?


1
vote

problema

Español

Tengo una acción "text30 en "text31111 que se parece a esto

  "text32  

Antes de agregar "text33 a esta acción, he estado probando el correo electrónico de confilción como este

  "text34  

Pero ahora, ya que agregué a resque trabajador para entregar el mensaje, supongo que no entrega el mensaje instantáneamente y, por lo tanto, estoy obteniendo esta prueba con el mensaje

  "text35  

¿Cómo puedo probar tales casos, cuando los trabajadores de ASYNC están involucrados y el resultado depende de ellos?

Original en ingles

I have an action create in UsersController which looks like this

def create   @user = User.new(params[:user])   if @user.save     sign_in_as(@user)     Resque.enqueue(MailWorker, @user.email)     redirect_to root_url, notice: "Thanks"   else     render "new"   end end 

Before I added reqsue to this action, I've been testing email confrimation like this

it "creates a new user account" do   # code for creating a new account...    ActionMailer::Base.deliveries.size.should == 1   mail = ActionMailer::Base.deliveries.last   mail.to.should == [user[:email]]   mail.body.encoded.should match(/Thank you for registration/) end 

But now, since I added resque worker to deliver the message, I guess it doesn't deliver the message instantly and therefore I'm getting this test failed with the message

 Failure/Error: ActionMailer::Base.deliveries.size.should == 1    expected: 1         got: 0 (using ==) 

How can I test such cases, when async workers are involved and the result depends on them?

           

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Ahora que ha desacoplado la entrega de correo de su controlador, también podrá desacoplar las pruebas. Lo que he hecho en el pasado para esto es usar el resque_spec gem que le permite agregar afirmaciones por si No los trabajos han sido acudidos como se esperaba.

Usted agregará algo como esto en sus pruebas:

  requestAnimationFrame(that.play.bind(that)); 2  
 

Now that you've decoupled the mail delivery from your controller, you will also be able to decouple the tests. What I've done in the past for this is use the resque_spec Gem which lets you add assertions for whether or not the jobs have been enqueued as expected.

You will be adding something like this in your tests:

MailWorker.should have_queued(user.email) 
 
 
1
 
vote

Eche un vistazo a rescue_spec gema.

 

Take a look at rescue_spec gem.

 
 

Relacionados problema

1  Los trabajos de resquen están programados correctamente en el entorno de desarrollo, pero no funcionan en pepino  ( Resque jobs are scheduled correctly in development environment but do not work ) 
Fue muy fácil configurar resque . Ahora tengo dificultades para tratar de pasar las pruebas de pepino con resque_specs . Soy bastante nuevo en los rieles ...

0  Running resque-programador en una granja web  ( Running resque scheduler on a web farm ) 
Si estoy ejecutando un Trabajo resque CRON para ejecutarse cada hora con resque-programador en una granja web de Say 2 o 3 servidores web ... ¿Cómo lo entiend...

0  Cómo forzar a Heroku a usar JSON / EXT SOBRE JSON / PURE  ( How to force heroku to use json ext over json pure ) 
He golpeado un obstáculo y no estoy seguro de cómo proceder. Estoy tratando de restar trabajando con Redis para ir a Heroku, tengo todo funcionando localmente...

0  No se puede entregar correo electrónico dentro de resque  ( Cant deliver email inside resque ) 
Tengo este from deepface import DeepFace import os import os.path import numpy as np BASE_DIR = os.path.dirname(os.path.abspath(__file__)) imgs = [] path = ...

3  Error de carga de la interfaz web resque  ( Resque web interface loading error ) 
He instalado resque en rieles 3 usando este Tutorial . El problema es cuando estoy tratando de usar la interfaz web resk. Cuando voy a {localhost}/resque/...

1  ¿Cómo usar correctamente los resqueros?  ( How to correctly use resque workers ) 
Tengo las siguientes tareas que hacer en una aplicación de rieles: descargar un video Recorte el video con FFMPEG entre una duración dada (por ejemplo ,:...

1  ¿Cómo configura la URL de Redis en resque si no está usando rieles?  ( How do you set the redis url in resque if youre not using rails ) 
En rieles, es fácil simplemente agregar una configuración / resque.yml, pero estamos ejecutando una gema en la línea de comandos y nos gustaría decirle dónde ...

39  ¿Cómo implementar resquebradores en producción?  ( How to deploy resque workers in production ) 
Los chicos de GitHub lanzaron recientemente su aplicación de procesamiento de antecedentes que utiliza Redis: http://github.com/defunkt/resque http://githu...

1  Heroku programador resque  ( Heroku scheduler resque ) 
Tengo una aplicación Ruby On Rails (1.9.2 y 3.2) que se ejecuta en Heroku con redis / resque que requiere que una tarea de rastrillo sean enlatada a intervalo...

0  Rails cola un cálculo después de_destroy  ( Rails queue a calculation after destroy ) 
Estoy en el proceso de implementar resque para volver a calcular algo después de que se destruya una instancia del modelo. Para hacer esto, estoy usando una d...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos