Silex - 从测试发送时未执行监听器

时间:2017-08-29 08:52:46

标签: symfony testing silex

每次执行功能测试时,我都会编写一个类来加载DB中的一些灯具。创建这些夹具时调用一个服务,该服务在创建一些数据之后调度一个事件,以便从监听器创建其他数据。问题是加载灯具时没有执行监听器。

我是否需要模拟所有事件调度以使侦听器被执行?我的意思是,从灯具装载方法手动调度所需的事件?为什么没有听众执行?

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注册:

$app->register(new SubscribersServiceProvider());

SubscribersServiceProvider

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
    }
}

1 个答案:

答案 0 :(得分:1)

在应用程序启动时添加订阅者时,您只需在测试中调用$app->boot()