0
機能テストが実行されるたびにDBにいくつかのフィクスチャをロードするクラスを作成しました。これらのフィクスチャは、データを作成した後にリスナーから他のデータが作成されるようにイベントを送出するサービスを呼び出すことによって作成されます。問題は、フィクスチャをロードするときにリスナーが実行されないことです。Silex - テストからのディスパッチ時にリスナーが実行されない
すべてのイベントのディスパッチをモックして、リスナーを実行する必要がありますか?私は、什器のロードメソッドから希望のイベントを手動でディスパッチすることを意味しますか?なぜリスナーは実行されませんか?
$app->register(new SubscribersServiceProvider());
そしてSubscribersServiceProvider
に:
abstract class APITest extends WebTestCase
{
protected $app;
public function createApplication()
{
$app = require __DIR__ . '/../../app.php';
require __DIR__ . '/../../controllers.php';
require __DIR__ . '/../../routing.php';
$app['debug'] = true;
unset($app['exception_handler']);
$app['session.test'] = true;
return $app;
}
public function setUp()
{
parent::setUp();
/* @var $app Application */
$app = $this->app;
$fixtures = new TestingFixtures($app);
$fixtures->load();
}
...
}
加入者が持つapp.php
から登録されている
use Silex\ServiceProviderInterface;
class SubscribersServiceProvider implements ServiceProviderInterface
{
/**
* { @inheritdoc }
*/
public function register(Application $app)
{
}
/**
* { @inheritdoc }
*/
public function boot(Application $app)
{
/* @var $dispatcher EventDispatcher */
$dispatcher = $app['dispatcher'];
$dispatcher->addSubscriber(new CustomSubscriber($app['foo'], $app['mailer'], $app['monolog']));
//... more subscribers
}
}
より多くのコードを共有する必要があります。リスナーはどこに付いていますか?イベントをどこに派遣しますか? – mTorres
@mTorres - コードを追加しました。イベントは、テストフィクスチャによって使用されるサービス内の 'dispatch'メソッドを使用して送出されます。 – Manolo
ちょうど野生の推測ですが、テストの中でアプリを起動しますか? – mTorres