我正在尝试为我的 Silex 应用程序创建一个单元测试。单元测试类看起来像这样:
class PageTest extends WebTestCase {
public function createApplication() {
$app = require __DIR__ . '/../../app/app.php';
$app['debug'] = true;
$app['session.storage'] = $app->share(function() {
return new MockArraySessionStorage();
});
$app['session.test'] = true;
unset($app['exception_handler']);
return $app;
}
public function testIndex() {
$client = $this->createClient();
$client->request('GET', '/');
$this->assertTrue($client->getResponse()->isOk());
}
}
它试图请求的 silex 路由看起来像这样:
$app->get('/', function() use($app) {
$user = $app['session']->get('loginUser');
return $app['twig']->render('views/index.twig', array(
'user' => $user,
));
});
这会导致RuntimeException: 无法启动会话,因为标头已发送。在\Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage.php:142中,回溯包含 $app['session']->get 路由中的行。
看起来在 NativeSessionStorage 中的会话开始尝试之前发生的输出实际上是 PHPUnit 输出信息,因为这是我在错误消息之前得到的唯一输出:
PHPUnit 3.7.8 by Sebastian Bergmann.
Configuration read from (PATH)\phpunit.xml
E.......
我有点困惑,因为 phpunit 的这个错误输出发生在实际测试方法执行之前的输出中。我没有运行任何其他测试方法,所以它必须来自这个错误。
我应该如何让 PHPUnit 在使用会话变量的 silex 路由上工作?