Фреймворк Php Slim - PullRequest
       8

Фреймворк Php Slim

0 голосов
/ 25 апреля 2019

Я создал оболочку для запроса Slim в своем приложении, чтобы иметь возможность создавать некоторые пользовательские методы для объекта Request.

class Request extends SlimRequest
{
   /**
    * Get authorization token.
    *
    * @return null|string
    */
   public function getAuthToken(): ?string
   {
       return $this->getHeaderLine('FOOBAR-TOKEN');
   }

   /**
    * Retrieves a route parameter.
    *
    * @param string $name
    * @return string|null
    */
   public function getRouteParam(string $name): ?string
   {
       return $this->getRoute()->getArgument($name);
   }

   /**
    * Retrieves the route instance.
    *
    * @return Route
    */
   public function getRoute(): Route
   {
       return $this->getAttribute('route');
   }

}

Моя проблема возникает при попытке создать модульный тест для этого класса. Я тестировал запросы, используя встроенные макеты Slims. Первой функцией я добавил заголовок к запросу, который можно увидеть ниже, но я не могу понять, как добавить объект Route к запросу

$request = Request::createFromEnvironment(Environment::mock());
$request = $request->withHeader('FOOBAR-TOKEN', 'superSafeExampleToken');

Я пытался создать запрос с параметрами запроса, но $ this-> getAttribute ('route'); возвращает ноль

   $requestOptions = [
        'REQUEST_METHOD' => 'POST,
        'REQUEST_URI' => '/foo/bar',
        'QUERY_STRING' => http_build_query($requestParameters),
    ];
    $environment = Environment::mock($requestOptions);

1 Ответ

0 голосов
/ 26 апреля 2019

Хорошо, так что решение было следующим

public function testGetRouteParam()
{
    $route = $route = new Route('GET', '/foo/{bar}', []);
    $route->setArguments(['bar' => 1]);
    $request = Request::createFromEnvironment(Environment::mock());
    $request = $request->withAttribute('route', $route);

    $this->assertEquals(1, $request->getRouteParam('bar'));
    $this->assertNull($request->getRouteParam('baz'));
}
...