Codeception / Codeception/module-mezzio

Set recreateApplicationBetweenRequests to true by default

Ouverte
#4 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
PHP
Étoiles
1
Forks
4
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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?

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Examinez les commits référencés et recherchez où recreateApplicationBetweenTests et recreateApplicationBetweenRequests sont définis et où leurs valeurs par défaut sont appliquées. Confirmez le comportement de réinitialisation de l’état au niveau de la requête décrit dans l’exemple IdentityHelperMiddleware, puis vérifiez que la valeur par défaut est true et que les tests de module existants couvrent le comportement modifié.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php
Domaine
testing
Type d'issue
Bug
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.