每次执行功能测试时,我都会编写一个类来加载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
}
}
答案 0 :(得分:1)
在应用程序启动时添加订阅者时,您只需在测试中调用$app->boot()
。