symfony codeception Мок валидатора - подмена сетевого валидатора для функциональных тестов
Primary tabs
Возможное решение
Для начала нужно получить именно тот контейнер, который реально используется для эмуляции сетевого запроса в ваших тестах.
После того как вы определились на чем именно (на каком объекте) вызывать getContainer() или подобный метод получающий контейнер, мок можно провести с помощью метода вроде:
protected KernelBrowser $client;
protected function mockSymfonyContainerElement(string $className, object $object) {
$this->client->getContainer()->set($className, $object);
}
Например:
protected function mockTagsValidator() {
$this->mockSymfonyContainerElement(
\App\Validator\TagsExistValidator::class,
new TagsExistValidatorMock()
);
}
Комментарии к этой же проблеме в видео:
- телеграм: https://t.me/prgblg/59
- ютуб: https://youtu.be/D0dbhk1ChHo
- вк: https://vkvideo.ru/video-58271214_456239512
Прочие материалы
Судя по всему проблема это известная: https://stackoverflow.com/questions/5057...
How to mock service with symfony 4 in functional tests?
Что посмотреть:
- Документация: https://symfony.com/doc/current/testing....
- How do I mock services in Symfony DIC in functional testing? : https://github.com/Codeception/module-sy...
- Интересный пример: https://www.a-broad-view.com/tech-talk/r...
- Struggling with Service Mocking: Functional Testing in Symfony: https://github.com/symfony/symfony/discu...
как сделать мок класса из контейнера symfony в codeception для функционального теста cest-класса
symfony mock custom validator in test
- Log in to post comments
- 359 reads
vedro-compota
Fri, 05/02/2025 - 18:16
Permalink
Команда для создания хэлпера
Команда для создания хэлпера для мока:
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 05/12/2025 - 17:33
Permalink
Service `container` is
Ошибка для кода:
public function _before(FunctionalTester $I, ) { parent::_before($I); $container = $I->grabService('container'); $container->set('service_id', \App\Validator\TagsExistValidator::class, new TagsExistValidatorMock()); }на базе идеи https://github.com/Codeception/module-sy...
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 05/12/2025 - 21:53
Permalink
черновик неработающего
черновик неработающего решения:
<pre class="brush: php">class PostCest extends BaseFunctionalCest { protected int $postId; protected array $errors = ['title' => null, 'tags' => null]; public function _before(FunctionalTester $I, ) { parent::__construct($I); $newsRepository = $I->make(TagsExistValidator::class, [ 'validate' => null, ]); $container->set(NewsRepositoryInterface::class, $newsRepository); } </pre>_____________
матфак вгу и остальная классика =)