2017-08-29 8 views
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 
    } 
} 
+0

より多くのコードを共有する必要があります。リスナーはどこに付いていますか?イベントをどこに派遣しますか? – mTorres

+0

@mTorres - コードを追加しました。イベントは、テストフィクスチャによって使用されるサービス内の 'dispatch'メソッドを使用して送出されます。 – Manolo

+1

ちょうど野生の推測ですが、テストの中でアプリを起動しますか? – mTorres

答えて

1
加入者はときにアプリケーション追加されたあなただけのテストで $app->boot()を呼び出す必要が

ブーツ。

関連する問題