2017-08-29 22 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()为用户添加应用程序时靴子。