Need Advice on mocking the sdk for unit and integration tests
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Documentación
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- php
Línea de trabajo
El issue menciona GraphServiceClient, los generadores de solicitudes, los mocks de PHPUnit y el MockHandler de Guzzle, pero no incluye archivos del repositorio ni puntos de entrada de pruebas. Empieza siguiendo la construcción de solicitudes de GraphServiceClient y comparándola con la guía de pruebas de Guzzle enlazada; para darlo por terminado sería necesario contar con un enfoque de mocking documentado y compatible tanto para las pruebas unitarias como para las de integración.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
For unit testing a class in out application that uses the sdk there isn't an easy way to mock the sdk parts see code block below.
I had a dig aorund in the source and couldnt find anything helpful in regards to this. Though I did stumble onto somthing indicating it uses the guzzle client so I was wondering if there was a way to do this:
https://docs.guzzlephp.org/en/stable/testing.html#mock-handler
with the sdk?
Or if there was any other recomended approach?
I will also need to write integration tests and dont want to be letting it call out the the MS servers so the guzzle mock hadnler or something similar would be very useful.
<?php
use Http\Promise\Promise;
use Microsoft\Graph\Generated\Chats\Item\Messages\MessagesRequestBuilder;
use Microsoft\Graph\Generated\Users\Item\Messages\Item\MessageItemRequestBuilder;
use Microsoft\Graph\Generated\Users\Item\Messages\Item\Value\ContentRequestBuilder;
use Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilder;
use Microsoft\Graph\Generated\Users\UsersRequestBuilder;
use Microsoft\Graph\GraphServiceClient;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\StreamInterface;
class SomeService {
public function __construct(private GraphServiceClient $client)
{
}
public function run(): void {
$mimeEmail = $this->client->users()
->byUserId('testuser@testing.com')
->messages()
->byMessageId('SomeMessageId')
->content()
->get()
->wait();
//do something with $mimeEmail;
}
}
class SomeServiceTest extends TestCase
{
public function testComponent(): void
{
$graphServiceClient = $this->createMock(GraphServiceClient::class);
$mockUsersRequestBuilder = $this->createMock(UsersRequestBuilder::class);
$graphServiceClient->expects(self::once())
->method('users')
->willReturn($mockUsersRequestBuilder)
;
$userItemRequestBuilder = $this->createMock(UserItemRequestBuilder::class);
$mockUsersRequestBuilder->expects(self::once())
->method('byUserId')
->with($this->email)
->willReturn($userItemRequestBuilder)
;
$messagesRequestBuilder = $this->createMock(MessagesRequestBuilder::class);
$userItemRequestBuilder->expects(self::once())
->method('messages')
->willReturn($messagesRequestBuilder);
$messageItemRequestBuilder = $this->createMock(MessageItemRequestBuilder::class);
$messagesRequestBuilder->expects(self::once())
->method('byMessageId')
->with('SomeMessageId')
->willReturn($messageItemRequestBuilder)
;
$contentRequestBuilder = $this->createMock(ContentRequestBuilder::class);
$messageItemRequestBuilder->expects(self::once())
->method('content')
->willReturn($contentRequestBuilder)
;
$mimeMessagePromise = $this->createMock(Promise::class);
$contentRequestBuilder->expects(self::once())
->method('get')
->willReturn($mimeMessagePromise)
;
$stream = $this->createMock(StreamInterface::class);
$mimeMessagePromise->expects(self::once())
->method('wait')
->willReturn($stream)
;
$stream->expects(self::once())
->method('getContents')
->willReturn('Mime Contents')
;
$service = new SomeService($graphServiceClient);
$service->run();
//Do assertions
}
}
- Lenguaje dominante
- PHP
- Estrellas
- 669
- Forks
- 150
- Merge medio
- 15 h 21 min
- PR fusionados (30 d)
- 3
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoftgraph/msgraph-sdk-php
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoftgraph/msgraph-sdk-php#1794 · 2 comentarios ·
-
bug: metadata type:bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
microsoftgraph/msgraph-sdk-php#1739 · 6 comentarios ·
-
status:waiting-for-triage type:bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
microsoftgraph/msgraph-sdk-php#1643 · 8 comentarios · 4 reacciones ·
-
status:waiting-for-triage
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
microsoftgraph/msgraph-sdk-php#1800 · 1 reacción ·
-
Now Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 1/100
microsoftgraph/msgraph-sdk-php#1799 ·
Todos los issues de microsoftgraph/msgraph-sdk-php
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
getgrav/grav-plugin-api#45 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
RSS-Bridge/rss-bridge#5098 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
phingofficial/phing#2025 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
silverstripe/developer-docs#911 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100