Prove di scrittura per un sidekiq lavoratore

Sto usando la rspec-sidekiq gemma (https://github.com/philostler/rspec-sidekiq) per aiutare a testare un lavoratore che sto scrivendo, ma per qualche motivo il mio test continua a non funzionare.

Ecco il mio Test:

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

È qui l’errore:

 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)>'

Ho basato il mio test di basso livello fuori del loro esempio sul loro wiki, ma non funziona per me… qualche motivo per cui questo non funzionano?

  • Hai mai ottenere questo lavoro? Io sono in esecuzione nello stesso problema.



2 Replies
  1. 28

    Ci sono due cose da provare qui asincrona l’accodamento di lavoro in coda e l’esecuzione del lavoro.

    È possibile verificare l’esecuzione del processo di creazione di un’istanza del lavoro di classe e di chiamare perform().

    È possibile verificare la l’accodamento di lavoro chiamando perform_async() sul lavoro di classe.

    Per testare l’attesa del test, si dovrebbe fare:

     it "enqueues a communication worker" do
        CommunicationWorker.perform_async("[email protected]", "[email protected]", [1,2,3])
        expect(CommunicationWorker).to have(1).jobs
      end

    Tuttavia, questo è davvero solo per mettere alla prova la Sidekiq quadro e non un test utile. Vorrei raccomandare test di scrittura per il comportamento interno del lavoro stesso:

     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
    • Al momento questa risposta è stata data, sto cercando di indovinare have_enqueued_jobs era ancora valido, ma ora la sintassi corretta è have(1).jobs
    • Grazie per l’aggiornamento. Modificato per la nuova sintassi.
    • grazie! e per google: has_enqueued_job? Ho trovato proprio zero risultati per la stringa
    • Per rspec 3, questo sarà il lavoro: expect(CommunicationWorker.jobs.size).to eq(1)
  2. 2

    Qual è il metodo di prova? Avvolgere il test esistenti con Sidekiq::Testing.fake! do <your code> end. In questo modo il falso coda viene utilizzata. Se sidekiq dell’metodi di prova è ‘inline’, il lavoratore potrà essere eseguito subito (e, quindi, la coda sarà 0 lunghezza).

    Check out: https://github.com/mperham/sidekiq/wiki/Testing per ulteriori info.

Lascia un commento