Codeception / Codeception/module-mezzio

Set recreateApplicationBetweenRequests to true by default

オープン
#4 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
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

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。