rspec - have_enqueued_sidekiq_job - Pruebas de escritura para un trabajador de sidekiq.
rspec have_enqueued_sidekiq_job (2)
Estoy usando la gema rspec-sidekiq
( https://github.com/philostler/rspec-sidekiq ) para ayudar a probar a un trabajador que estoy escribiendo, pero por alguna razón mi prueba sigue fallando.
Aquí está mi prueba:
require ''spec_helper''
describe CommunicationWorker do
it { should be_retryable false }
it "enqueues a communication worker" do
subject.perform("[email protected]", "[email protected]", [1,2,3])
expect(CommunicationWorker).to have_enqueued_jobs(1)
end
end
Aquí está el error:
1) CommunicationWorker enqueues a communication worker
Failure/Error: expect(CommunicationWorker).to have_enqueued_jobs(1)
expected CommunicationWorker to have 1 enqueued job but got 0
# ./spec/workers/communication_worker_spec.rb:9:in `block (2 levels) in <top (required)>''
Basé mi prueba de bajo nivel de su ejemplo en su wiki, pero no funciona para mí ... ¿alguna razón por la que esto no funcionaría?
¿Cuál es el método de prueba? Intente Sidekiq::Testing.fake! do <your code> end
su prueba existente con Sidekiq::Testing.fake! do <your code> end
Sidekiq::Testing.fake! do <your code> end
Esto asegurará que se use una cola falsa. Si los métodos de prueba de sidekiq son ''en línea'', el trabajador se ejecutará de inmediato (y, por lo tanto, su cola tendrá una longitud de 0).
Echa un vistazo a: https://github.com/mperham/sidekiq/wiki/Testing para obtener más información.
Hay dos cosas para probar aquí, la puesta en cola asíncrona del trabajo en la cola y la ejecución del trabajo.
Puede probar la ejecución del trabajo creando una instancia de la clase de trabajo y llamando a perform()
.
Puede probar la perform_async()
del trabajo llamando a perform_async()
en la clase de trabajo.
Para probar la expectativa en su prueba, debería estar haciendo:
it "enqueues a communication worker" do
CommunicationWorker.perform_async("[email protected]", "[email protected]", [1,2,3])
expect(CommunicationWorker).to have(1).jobs
end
Sin embargo, esto es solo una prueba del marco Sidekiq y no una prueba útil. Recomendaría escribir pruebas para el comportamiento interno del trabajo en sí:
it "enqueues a communication worker" do
Widget.expects(:do_work).with(:some_value)
Mailer.expects(:deliver)
CommunicationWorker.new.perform("[email protected]", "[email protected]", [1,2,3])
end