Codeception / Codeception/module-doctrine
Second and next requests in tests reloads entities from doctrine entity manager
- 主要言語
- PHP
- スター
- 4
- フォーク
- 2
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
#### What are you trying to achieve?
All requests should use same instances of entities during the test.
#### What do you get instead?
Second and subsequent requests reloads entities which causes instances within test to be different from those that are used within those requests.
```php
grabEntityFromRepository(Foo::class, ['id' => 1]); // spl_object_hash: 000000006cf7be51000000007baa4f48
$tester->sendPUT('/foo'); // spl_object_hash: 000000006cf7be51000000007baa4f48 same as first
$tester->sendPUT('/foo'); // spl_object_hash: 000000006cf7b6b0000000007baa4f48 different than previous
$tester->sendPUT('/foo'); // spl_object_hash: 000000006cf7b5c0000000007baa4f48 different than previous
// $instance here has different values than those used within second and any subsequent request
}
```
### Workaround
In order to get latest version of the entity we have to "re-grab" it from repository:
```php
grabEntityFromRepository(Foo::class, ['id' => 1]); // spl_object_hash: 000000006cf7b5c0000000007baa4f48 is same as in last request
```
But it would be better to reuse the first instance the same way first request does.
### Details
* Codeception version: 2.5.1
* PHP Version: 7.1.24
* Operating System: Linux
* Installation type: Composer
* Suite configuration:
```yml
modules:
enabled:
- Asserts: ~
- Symfony:
cache_router: true
rebootable_client: true
- REST:
url: /api
depends: Symfony
- Doctrine2:
depends: Symfony
- \Helper\Api: ~
disabled:
- PhpBrowser
- WebDriver
```
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
Doctrine2 モジュールとその Symfony 依存関係から始め、rebootable_client を有効にした提供済みのテストフローを使用して、リクエスト間でエンティティの同一性が変化することを再現します。entity manager とリクエストのライフサイクルを追跡し、最初に取得したエンティティインスタンスが 2 回目以降のリクエストで再利用されることを確認します。その際、文書化されている再取得の workaround を壊さないようにします。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- php
- 領域
- databases, testing-qa
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100