2017-07-21 1 views
2

J'ai du mal à comprendre comment je pourrais tester un envoi d'un emploi dans un autre emploi. Je vais fournir un exemple de code.Laravel [5.3 | 5.4] test de répartition du travail dans un emploi

Ceci est ma principale catégorie d'emplois, nous pouvons l'appeler father

final class FatherJob implements ShouldQueue 
{ 
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 

/** 
* Create a new job instance. 
*/ 
public function __construct() 
{ 
} 

/** 
* Execute the job. 
* 
* @return void 
*/ 
public function handle() 
{ 
    \Log::info("Hello World, I'm the father."); 

    dispatch(new ChildJob()); 
} 
} 

Ensuite, nous avons le travail des enfants

final class ChildJob implements ShouldQueue 
{ 
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 

/** 
* Create a new job instance. 
*/ 
public function __construct() 
{ 
} 

/** 
* Execute the job. 
* 
* @return void 
*/ 
public function handle() 
{ 
    \Log::info("I'm the child"); 
} 
} 

Le test a été défini comme suit

final class JobTest extends TestCase 
{ 
/** @test */ 
public function it_has_been_dispatched() 
{ 
    $this->expectsJobs(ChildJob::class); 
    dispatch(New FatherJob()); 
} 
} 

Ce test échoue, bien sûr c'est tout le point de la question, mais pourquoi?

Je l'ai fait quelques recherches et je suppose que le problème repose sur l'appel withoutJobs() à l'intérieur expectsJobs(), il semble que la file d'attente withoutJobs() distrupt actuelle ainsi il ne permet pas d'appeler le reste des emplois mais peut-être que je suis tout à fait hors piste.

Si cette logique est prévue, comment puis-je créer une suite de tests qui me permet de vérifier si le travail dans un travail a été appelé?

Merci à l'avance.

Répondre

0

ExpectsJobs se moque de tous les jobs du moteur. Vous ne pouvez pas utiliser dispacth().

$this->expectsJobs(ChildJob::class); 
$job = new FatherJob(); 
$job->handle();