Symfony 2.8功能测试:如何在会话数组中添加值?
在Symfony功能测试中为会话注入值(使用Liip测试包)
你之前尝试的session.storage.options.entity_id方法不对,因为这个配置项是用来设置会话存储的底层参数(比如存储路径、过期时间),不是直接往会话数组里存业务数据的。下面给你两种适配Liip测试包场景的正确实现方式:
方法一:直接操作会话服务
不管是否需要登录,都可以通过获取Symfony的session服务直接设置会话值:
// 初始化测试客户端 $this->client = static::createClient(); // 获取会话实例并启动它(测试环境下会话不会自动启动) $session = $this->client->getContainer()->get('session'); $session->start(); // 存入你需要的会话数据(别忘了控制器里还检查了`administration`键) $session->set('administration', true); // 按业务逻辑设置对应值 $session->set('entity_id', 12); // 调用save()确保数据写入会话存储 $session->save(); // 现在发起请求,控制器就能读取到这些会话值了 $this->client->request('GET', '/your-controller-action-route');
方法二:结合Liip的自动登录功能
因为你在config_test.yml里配置了Liip的自动认证,所以可以用makeClient(true)自动登录后,再补充会话数据:
// 创建自动登录的客户端 $this->client = $this->makeClient(true); // 获取会话并设置所需值 $session = $this->client->getContainer()->get('session'); $session->set('administration', true); $session->set('entity_id', 12); $session->save(); // 发起请求测试目标接口 $this->client->request('GET', '/your-target-route');
关键注意点
- 必须调用
$session->start():测试环境下会话默认不会自动启动,手动启动才能正常读写数据。 - 必须调用
$session->save():确保会话数据持久化到你配置的session.storage.mock_file中,否则下一次请求时数据会丢失。 - 匹配控制器的检查逻辑:控制器里用
$session->has('administration')做了判断,测试里一定要设置这个键,否则控制器会跳过后续的entity_id读取逻辑。
内容的提问来源于stack exchange,提问作者chishiki
相关产品推荐
相关产品推荐

