Laravel: Возможно ли напрямую протестировать вывод ответа json функции без фактического прохождения URI? - PullRequest
0 голосов
/ 28 апреля 2018

Из документов , я могу проверить некоторые json, возвращенные из моего приложения, используя следующее:

$response = $this->json('POST', '/user', ['name' => 'Sally']);

$response
    ->assertStatus(201)
    ->assertJson([
        'created' => true,
    ]);

Однако возможно ли обойти фактический вызов URI с помощью $this->json(*method*, *uri*, *data*); и вместо этого проверить прямой вывод функции контроллера, которая возвращает json? Например, я хочу сделать что-то вроде этого:

// My controller:

function getPageData(){
  $data = array('array', 'of', 'data');
  return response()->json($data);
}

// My Test Class:

$controller = new Primary();
$response = $controller->getPageData();

$response->assertJson([
    'array', 'of', 'data'
]);

Возможно ли это?

1 Ответ

0 голосов
/ 28 апреля 2018

Вы можете сделать это для некоторых основных методов, но это может вызвать побочные эффекты:

app(SomeController::class)->someControllerMethod();

По сути, app() разрешит зависимости от конструктора, но не разрешит зависимости метода. Так что, если вы напишите что-то вроде method(Request $request), появится сообщение об ошибке.

Я почти уверен, что работа с request() вызовет непреднамеренные эффекты, так как нет никакого реального запроса.

Edit:

Затем можно создать объект TestResponse, чтобы получить также все утверждения:

$res = app(SomeController::class)->someControllerMethod();
$testRes = new Illuminate\Foundation\Testing\TestResponse($res);
$testRes->assertJson(...); // Will be available
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...