Google Analytics API에 연결하고이 명령을 사용하여 데이터를 가져옵니다. 이것은 작동하지만 테스트를 작성하려고 시도하고 Google API 연결을 시뮬레이트하는 방법을 모릅니다. 내 첫 번째 생각은 문맥에서 Google API를 모의했지만이 명령을 명령에 주입하는 방법 이었습니까?Symfony 콘솔 명령 behat 테스트
/**
* @inheritdoc
* @param InputInterface $input
* @param OutputInterface $output
*/
public function execute(InputInterface $input, OutputInterface $output): void
{
//connect to google service
/** @var $googleClient \Google_Client*/
$googleClient = $this->googleConnect();
/** @var $shopTokenEntity TokenEntity */
foreach ($tokensDataProvider as $shopTokenEntity) {
//refresh token if necessary
$this->refreshToken($googleClient, $shopTokenEntity);
$clientGA = new AnalyticsConversion($googleClient);
/** @var $analytics \Google_Service_Analytics*/
$analytics = $clientGA->getAnalyticsService();
try {
//do some other staff get data and save to db
} catch (\Google_Service_Exception $err) {
$this->getLogger()->addWarning($err->getMessage());
}
}
}
/**
*
* @return \Google_Client
*/
private function googleConnect(): \Google_Client
{
/** @var $conversionApp ClientConversionFactory */
$conversionApp = $this->container->get('google.client_conversion.factory');
/** @var $googleClient \Google_Client */
$googleClient = $conversionApp->connect();
return $googleClient;
}
/**
* @param \Google_Client $googleClient
* @param TokenEntity $tokenEntity
*/
private function refreshToken(\Google_Client $googleClient, TokenEntity $tokenEntity): void
{
//set Auth
$googleClient->setAccessToken($tokenEntity->getAccessToken());
//refresh and save token if needed
if ($googleClient->isAccessTokenExpired()) {
$this->getLogger()->addInfo("Refresh token for ShopID: " . $tokenEntity->getShopId());
$googleClient->fetchAccessTokenWithRefreshToken();
//save token to db
}
}
내 두 번째 생각은 내가 특정 이벤트 발송자에 대한 서비스를 구글이 이벤트를 조롱에 연결할 때의 EventListener 및 변경 방법을 추가했다. 어떤 아이디어라도 도움이 될 것입니다.
, 당신은 예를 들어, 테스트에서 모의 클래스를 삽입 할 수 있도록 액세스가, 컨테이너 있습니다 : $ client = static :: createClient(); $ client-> getContainer() -> set ('google.client_conversion.factory', YourFactoryClass); –
네, 맞습니다. 지금은 비슷한 것을 개발하고 있지만 service_test.yml을 특별한 클래스로 만들고 싶습니다. 서비스 : google.client_conversion.factory : 클래스 : ClientConversionFactoryMock 인수 : [ '% root_dir %/config/key/conversion_app .json '] –
[symfony에서 동작하는 외부 API 조롱] (http://www.inanzzz.com/index.php/post/2blk/mocking-external-apis-with-behat-in-symfony) 및 [Mocking 내부 또는 외부 서비스 또는 API 호출 (behat)] (http://www.inanzzz.com/index.php/post/2y8u/mocking-internal-or-external-service-or-api-calls-with-behat) 앞으로 도움이 될 것입니다. – BentCoder