Codeception / Codeception/module-mezzio

Set recreateApplicationBetweenRequests to true by default

Abierto
#4 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
PHP
Estrellas
1
Forks
4
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Hi, commit https://github.com/Codeception/module-zendexpressive/commit/7d405fd406bd55e1eea671ddf4faa449b3be8229 introduced the flags to recreate the application instance between tests and between requests, both set to false by default.

Commit https://github.com/Codeception/module-zendexpressive/commit/8233e766f39effd52a9d8abbe18b06bc58b759fa changed the default of `recreateApplicationBetweenTests` to true, which is sane to me, but without any reason described.

In my humble opinion also `recreateApplicationBetweenRequests` should be set to true by default, because any stateful service or component with non-deterministic behavior related to the request fails to be reset on subsequent requests.

A trivial example may be the initialization of an Identity helper:

```php
class IdentityHelperMiddleware implements MiddlewareInterface
{
private IdentityHelper $identityHelper;

public function __construct(IdentityHelper $identityHelper)
{
$this->identityHelper = $identityHelper;
}

public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$username = $request->getAttribute('username');
if (null !== $username) {
$this->identityHelper->setIdentity($username);
}

return $handler->handle($request);
}
}
```
In this code snipped `IdentityHelper` is a service instantiated only once per test with `recreateApplicationBetweenRequests = false`, so an hypothetical second request in the same test without the username attribute wouldn't clear the previously registered identity, while a real scenario would instead end with an empty identity for the second request.

Is this a user fault? Maybe, but PHP is shared-nothing by default, and almost every developer takes it for granted.

I don't experience any visible performance degradation switching the flag.

@Naktibalda is there any reason `recreateApplicationBetweenRequests` was set to false by default?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Review the referenced commits and trace where recreateApplicationBetweenTests and recreateApplicationBetweenRequests are defined and their defaults are applied. Confirm the request-level state-reset behavior described in the IdentityHelperMiddleware example, then verify that the default is true and that existing module tests cover the changed behavior.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
php
Área
testing
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.