Codeception / Codeception/module-doctrine
[Doctrine] ManyToMany Relationships not persisted in database with haveInRepository nested entity creation
- Ngôn ngữ chính
- PHP
- Star
- 4
- Fork
- 2
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
#### What are you trying to achieve?
I am running a functional test on a Symfony 4 + Doctrine 2 with two entities with a ManyToMany relationship. I create the entities using haveInRepository nested functionality and I expect to have the two entities created on the database and related on the join table.
#### What do you get instead?
The entities are created but relationships in join tables are not, so the test fails due to missing information on database.
> Provide console output if related. Use `-vvv` mode for more details.
```bash
vagrant@symfonyvm:/var/www/mtm$ php vendor/bin/codecept run
Codeception PHP Testing Framework v3.1.2
Powered by PHPUnit 8.5.0 by Sebastian Bergmann and contributors.
Running with seed:
App\Tests.acceptance Tests (0) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
App\Tests.functional Tests (1) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Testing App\Tests.functional
✖ ManytoManyEntitiesCest: Try to test (0.07s)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
App\Tests.unit Tests (0) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Time: 326 ms, Memory: 28.25 MB
There was 1 failure:
---------
1) ManytoManyEntitiesCest: Try to test
Test tests/functional/ManytoManyEntitiesCest.php:tryToTest
Step See in repository "App\Entity\EntityA",{"entityB":{"name":"Name B"}}
Fail App\Entity\EntityA with {"entityB":{"name":"Name B"}}
Failed asserting that false is true.
Scenario Steps:
4. $I->seeInRepository("App\Entity\EntityA",{"entityB":{"name":"Name B"}}) at tests/functional/ManytoManyEntitiesCest.php:24
3. $I->seeInRepository("App\Entity\EntityA",{"name":"Name A"}) at tests/functional/ManytoManyEntitiesCest.php:23
2. $I->seeInRepository("App\Entity\EntityB",{"name":"Name B"}) at tests/functional/ManytoManyEntitiesCest.php:22
1. $I->haveInRepository("App\Entity\EntityA",{"name":"Name A","entityB":[{"name":"Name B"}]}) at tests/functional/ManytoManyEntitiesCest.php:19
FAILURES!
Tests: 1, Assertions: 3, Failures: 1.
```
> Provide test source code if related
```php
haveInRepository(
EntityA::class,
[
'name' => 'Name A',
'entityB' =>[[ 'name' => 'Name B' ]],
]);
$I->seeInRepository(EntityB::class, ['name' => 'Name B']);
$I->seeInRepository(EntityA::class, ['name' => 'Name A']);
$I->seeInRepository(EntityA::class, ['entityB' => ['name' => 'Name B']]);
}
```
### Details
With that setup, the two first seeInRepository pass but the third does not. It could be due to the syntax of the array not being correct on the last assertion as it should really be an array, but if you look into the database you can see that the join table has not been filled.
It may be due a syntax problem, but in that case it should be an issue with docs as it doesn't specify how to work with ManyToMany relationships.
I have created a complete example in this repo: https://github.com/Pryrios/test-manytomany
* Codeception version: Codeception PHP Testing Framework v3.1.2
* PHP Version: 7.2
* Operating System: Ubuntu 18.04
* Installation type: Composer
functional.suite.yml
```yml
actor: FunctionalTester
modules:
enabled:
- Symfony:
app_path: 'src'
environment: 'test'
- Doctrine2:
depends: Symfony
cleanup: true
- \App\Tests\Helper\Functional
```
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với tests/functional/ManytoManyEntitiesCest.php và cấu hình Doctrine2 trong functional.suite.yml, sau đó theo dõi cách haveInRepository xử lý dữ liệu entityB lồng nhau. Xác minh ánh xạ ManyToMany dự kiến và cú pháp assertion dựa trên trạng thái cơ sở dữ liệu được báo cáo. Hoàn tất khi các entity được tạo, bảng join chứa mối quan hệ và assertion seeInRepository cuối cùng vượt qua.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- php
- Lĩnh vực
- database, testing
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100