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