Symfony5:为功能测试准备会话内容



背景

我尝试创建一个功能测试(针对现有的代码——我知道TDD,但无论如何,代码已经存在了(。

这是一个";预订"-过程使用多个步骤(每个单独的控制器功能(。通过将临时数据存储到SESSION(CART对象内部(中,将数据从一个步骤传递到另一个步骤。

问题

对于步骤3的测试,我需要准备CART(里面至少有一个PRODUCT对象和一个PERSON对象(并将其存储到会话中,以便控制器功能可以使用它。

  • 我可以获得SESSION,它已经包含一个产品的CART
  • 我可以将PERSON对象添加到CART对象

但是:如何将CART对象存储回SESSION?

谢谢你的帮助!!!

class BookingControllerTest extends WebTestCase {
// ...
public function testStep3_CustomerDataValidation() {
// create the CLIENT
$this->client  = static::createClient();
// get random PRODUCT and add to CART
$product = $this->getRandomProduct(1)->first();
$this->addProductToCart($product);      // this is working! (creation of Session with cart-object inside)
// add PERSON to CART-Object and store back into SESSION
$session  = $this->client->getContainer()->get('session');
$cart     = $session->get('cart');
$person   = $this->personFactory->createPerson('Peter', 'Parker');
$cart->setPerson($person);

// --------------------------------------------------------
// HOW TO STORE THE CART-OBJECT BACK INTO THE SESSION??????
// --------------------------------------------------------
// make the REQUEST (step 3) and assert it
$this->client->request('GET', "/customer/validation");
$this->assertResponseStatusCodeSame(200);
}

private function addCourseToCart(Product $product): void {
// make REQUEST
$urlAddItem = "/add/{$product->getSlug()}";
$this->client->request('GET', $urlAddItem);
// assert RESPONSE
$this->assertResponseStatusCodeSame(302);
$this->assertTrue($this->client->getResponse()->isRedirect('/show/cart'));
}
// ...
}

只需添加以下内容:

$session->save():

最新更新