Код состояния ответа [200] не является кодом состояния перенаправления. Не удалось утверждать, что ложь является истиной

Это мой код модульного тестирования laravel для входа в систему

public function testClientSucceslogin()
{
    $user = factory(User::class)->create([
        'password' => 'secret',
        'status' => User::STATUS_ACTIVE,
        'type' => User::TYPE_CLIENT
    ]);
    $clientProfile = ClientProfile::where('client_id', $user->client_id)->first();
    $client_alias = Client::where('id', $user->client_id)->first();

    $this->get(route('login', [$user->email, $user->password]))
        ->assertStatus(200)
        ->assertRedirect('dashboard', [$client_alias->alias, $clientProfile->id])
        ->assertTrue(true);


}

и я получил эту ошибку

Response status code [200] is not a redirect status code. Failed asserting that false is true.

и я изменил код состояния на 302, но я получил эту ошибку

enter code heExpected status code 302 but received 200.

Не удалось утверждать, что ложь - это правда.

Как я могу решить эту проблему?

1 ответ

assertRedirect()сначала проверяет ваш код состояния. Если вы не следуете rfc , вы можете просто проверить,Locationзаголовок присутствует в ответе.

В 5.8+ вы можете сделать это черезassertLocation():

      $this->get(route('login', [$user->email, $user->password]))
     ->assertStatus(200)
     ->assertLocation('your-location')
     ->assertTrue(true);

В 5.4 вы использовалиPHPUnit::assertEquals()

      $response = $this->get(route('login', [$user->email, $user->password]));
$response->assertStatus(200)
     ->assertTrue(true);
PHPUnit::assertEquals(app('url')->to($uri), $response->headers->get('Location'));
Другие вопросы по тегам