2017-09-30 6 views
1

Ich möchte einige Methoden in der Job-Klasse (Lumen Queue) testen (Feature-Test über phpunit), um sicherzustellen, dass es richtig funktioniert.Test-Funktionalität in der Job-Klasse

Problem ist Jobklasse haben einige Arbeitsplätze Methoden wie $this->job->getJobId() und $this->release(5);

Wenn ich phpunit von der Konsole ausführen, ich einen Fehler:

Error: Call to a member function getJobId() on null

Der Test Code sieht wie folgt aus:

/** 
* @test 
*/ 
public function it_has_successfully_uploaded() 
{   
    $job = new SomeJob(['file' => ['file1.zip']]); 

    $job->handle(); 
} 

Wie kann ich dieses Problem lösen?

+0

Können Sie die Quelle Ihres Jobs und die vollständige Stack-Ablaufverfolgung der Ausnahme anzeigen? – sisve

+0

@sisve Stripped-Version sieht es so aus https://kopy.io/D9maN - Es gibt kein Problem mit 'dispatch()', sondern Tests über phpunit verursacht Problem, weil ich 'SomeJob' Objekt erstellen, so dass ich testen kann anstelle von 'dispatch()' –

Antwort

1

Ihr Code verwendet $this->job->getJobId(), aber nirgendwo wird diese Eigenschaft deklariert oder festgelegt. Verwenden Sie vielleicht das InteractsWithQueue-Merkmal, haben aber vergessen, dieses in Ihren Code einzufügen? In diesem Fall wird die Job-Eigenschaft in InteractsWithQueue::setJob festgelegt. Diese Methode kann von mehreren Stellen aufgerufen werden, aber in Ihrem Fall ist es wahrscheinlich von Illuminate\Queue\CallQueuedHandler::setJobInstanceIfNecessary. Dies ist eine interne Initialisierung Ihres Jobs, die Laravel für Sie erledigt, die Sie in Ihrem Testaufbau nachahmen müssen.

Ich würde eine vereinfachte Version von Illuminate\Contracts\Queue\Job implementieren und $job->setJob(new SimplisticVersionShazaamJob(...)); anrufen, bevor Sie $job->handle() aufrufen.

+0

'InteractsWithQueue' ist bereits in Lumen in der abstrakten Klasse' Job' enthalten. https://github.com/laravel/lumen/blob/master/app/Jobs/Job.php –

+0

@ I'll-Be-Back Also warum war es vorher als Laravel 5.5 getaggt und du hast über Laravel gesprochen? –

+0

@ MarcinNabiałek Fehler von meiner Seite. Sogar "InteractsWithQueue" ist bereits enthalten - es löst das Problem nicht. Also teste ich gerade den @sisve-Vorschlag mit '$ job-> setJob()' –

Verwandte Themen