Как проверить метод контроллера в Symphony с помощью phpunit? - PullRequest
0 голосов
/ 14 февраля 2019

Сейчас я занимаюсь разработкой приложения и хочу интегрировать модульный тест.если возможно, я хочу проверить методы контроллера, уже написанные в моем приложении

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Юнит тестирование

Вы можете юнит тестировать свои контроллеры так же, как и методы юнит тестирования любого другого класса.

Представьте себе следующий контроллер:

/**
 * @Route("/foo")
 */
class FooController extends AbstractController
{
    /**
     * @var SomeDependency 
     */
    private $someDependency;

    public function __construct(SomeDependency $someDependency)
    {
        $this->someDependency = $someDependency;
    }

    /**
     * @Route("/bar/{id}", name="foo_bar")
     */
    public function bar($id)
    {
        $result = $this->someDependency->someMethod($id)
        if (null === $result) {
            return new Response('Error', Response::HTTP_NOT_FOUND);
        }
        return new Response($result, Response::HTTP_OK);
    }
}

ДляВ этом примере вы можете написать следующий модульный тест (замените Mockery на любую другую фальшивую структуру):

public function testFooBar()
{
    // Mock dependencies
    $mockDependency = \Mockery::mock(SomeDependency::class);
    $mockDependency
        ->shouldReceive('someMethod')
        ->andReturn('Some result');
    // Create controller
    $fooController = new FooController($mockDependency);

    // Act
    $response = $fooController->bar(1);

    // Assert
    $this->assertEquals(200, $response->getStatusCode());
}

Интеграционное тестирование / Функциональное тестирование

ИспользуйтеWebTestCase как описано здесь :

class FooControllerTest extends WebTestCase
{
    public function testFooBar()
    {
        $client = static::createClient();

        $client->request('GET', '/foo/bar/1');

        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}

Возможно, вы захотите загрузить некоторые Fixtures перед выполнением этих тестов, так как в большинстве случаев им нужны действительные данные.Взгляните на DoctrineFixturesBundle здесь .

0 голосов
/ 15 февраля 2019

сначала выполните маршрутизацию, как в этом примере

    /**
     * @Route("/order", name="order_display")
     */
public function displayAction()

, и вы можете проверить ее, просто открыв localhost с помощью переменной маршрута

localhost: 8000 / order

...