Ваш макет менеджера сущностей работает нормально, проблема в провайдере геокодера. Также как EntityManagerInterface
, Geocoder\Provider\Provider
также является интерфейсом. Обслуживающий персонал библиотеки просто решил опустить суффикс.
Это означает, что вы не можете просто создать его, а вместо этого должны передать конкретный класс, реализующий интерфейс, например Geocoder\Provider\GoogleMaps\GoogleMaps
, если вы действительно хотите выполнить вызов геокодирования или смоделировать провайдера как хорошо.
Если вы хотите проверить, работает ли ваш настроенный провайдер геокодирования, вы можете написать функциональный тест с использованием Symfony WebTestCase, который выглядит примерно так:
<?php
namespace AppBundle\Tests\Scraper;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class OutletScraperTest extends WebTestCase
{
public function testFindsLocation()
{
// This will instantiate your Symfony application in the test environment
$client = static::createClient();
$container = $client->getContainer();
// Replace the class name with the service id, if you use artificial service ids like "app.outlet_scraper"
$scraper = $container->get(OutletScraper::class);
// Call whatever method you want to test on your outlet scraper
$result = $scraper->someMethod();
// Assert result matches expectations
$this->assertEquals(..., $result);
}
}
Будьте осторожны, поскольку при этом будет использоваться OutletScraper
, настроенный для вашего приложения, с обеими фактическими зависимостями. Таким образом, ваш поставщик геокодирования будет осуществлять фактический вызов любому поставщику, которого вы используете, который может использовать запросы, которые могут быть ограничены. Также вы будете использовать настоящий Doctrine EntityManager, то есть все, что вы записываете в базу данных, действительно будет записано. Поэтому специально для базы данных вы должны создать отдельную тестовую базу данных и настроить ее в своем app/config/config_test.yaml
.