Codeception / Codeception/module-mezzio
Set recreateApplicationBetweenRequests to true by default
- 主要言語
- PHP
- スター
- 1
- フォーク
- 4
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
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?
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
参照されているコミットを確認し、recreateApplicationBetweenTests と recreateApplicationBetweenRequests がどこで定義され、それらのデフォルト値がどこで適用されているかを追跡してください。IdentityHelperMiddleware の例で説明されているリクエストレベルの状態リセット動作を確認し、その後、デフォルト値が true であること、および既存のモジュールテストが変更された動作をカバーしていることを検証してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- php
- 領域
- testing
- issue の種類
- バグ
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100