私のアプリケーションの統合テストを実行しようとしています。Laravel統合テストジョブ
- StartJob
- PrepareJob
- PeformJob
StartJobはPrepareJobは、すべてのPrepareJobは1 PerformJobをディスパッチ一つ以上をディスパッチ:私はそれらの仕事を持っています。この
$this->expectsJobs(
[
StartJobs::class,
PrepareJob::class,
PerformJob::class
]
);
を追加
は私のテストでの$ this - を削除
1) JobsTest::testJobs
BadMethodCallException: Method Mockery_0_Illuminate_Contracts_Bus_Dispatcher::dispatchNow() does not exist on this mock object
をというエラーで失敗します> expectsJobsすべての私のテストに合格なりますが、私は与えられたジョブが実行された主張することはできませんそれはDBを特定の状態に変更したかどうかだけです。
StartJobs.php
class StartJobs extends Job implements ShouldQueue
{
use InteractsWithQueue;
use DispatchesJobs;
public function handle(Writer $writer)
{
$writer->info("[StartJob] Started");
for($i=0; $i < 5; $i++)
{
$this->dispatch(new PrepareJob());
}
$this->delete();
}
}
PrepareJob.php
class PrepareJob extends Job implements ShouldQueue
{
use InteractsWithQueue;
use DispatchesJobs;
public function handle(Writer $writer)
{
$writer->info("[PrepareJob] Started");
$this->dispatch(new PerformJob());
$this->delete();
}
}
PerformJob.php
class PerformJob extends Job implements ShouldQueue
{
use InteractsWithQueue;
public function handle(Writer $writer)
{
$writer->info("[PerformJob] Started");
$this->delete();
}
}
JobsTest.php
class JobsTest extends TestCase
{
/**
* @var Dispatcher
*/
protected $dispatcher;
protected function setUp()
{
parent::setUp();
$this->dispatcher = $this->app->make(Dispatcher::class);
}
public function testJobs()
{
$this->expectsJobs(
[
StartJobs::class,
PrepareJob::class,
PerformJob::class
]
);
$this->dispatcher->dispatch(new StartJobs());
}
}
私は具体的なディスパッチャーを使って何かをしなければならないと思いますが、$ this-> expectsJobはディスパッチャーをモックします。これに関連するかもしれません - https://github.com/laravel/lumen-framework/issues/207。これを解決する方法は何ですか?
あなたは私たちにコードを表示できますか? –
@AngadDubey私は、コードがそれほど単純化していると思っていましたが、それを投稿する際には何のポイントもありませんでした。しかし、私は簡単な仕事とテストを書いている間、私は問題の根源を見つけました。私はすべてのコードサンプルと観測結果を使って投稿を修正しました –