Ошибка с утверждением, что 200 идентично 302. в тестировании функций laravel

#php #laravel #laravel-5 #phpunit #laravel-testing

#php #laravel #laravel-5 #phpunit #laravel-тестирование

Вопрос:

Я запускаю тест в laravel. Но это неудачный тест. Я не понимаю причину, возможно, из-за промежуточного программного обеспечения, но не уверен.

Вот тестовая функция

 public function test_example()
    {
        $staff = factory(Staff::class)->create();
        $response = $this->actingAs($staff) 
        ->withSession(['foo' => 'bar'])
            ->get('/products');

        $response->assertStatus(200);
    }
}
 

Вот результат

    PHPUnitTextUICommand::main()


  Tests:  1 failed, 2 passed
  Time:   0.98s

PS C:projectscoldxlogistics> php artisan test
Warning: TTY mode is not supported on Windows platform.

   PASS  TestsFeatureDashboardTest
  ✓ dashboard loads fine
  ✓ user cannot see dashboard without login

   FAIL  TestsFeatureProductTest
  ⨯ example

  ---

  • TestsFeatureProductTest > example
  Expected status code 200 but received 302.
  Failed asserting that 200 is identical to 302.

  at C:projectscoldxlogisticstestsFeatureProductTest.php:24
     20$response = $this->actingAs($staff)
     21▕         ->withSession(['foo' => 'bar'])
     22▕             ->get('/products');
     23▕
  ➜  24$response->assertStatus(200);
     25▕     }
     26▕ }
     271   C:projectscoldxlogisticsvendorphpunitphpunitphpunit:61
      PHPUnitTextUICommand::main()


  Tests:  1 failed, 2 passed
  Time:   1.00s

 

На маршрутах работает несколько промежуточных программ. например

 auth,login_auth,two_factor_auth
 

и какова цель withSession(), как ее использовать? я вижу документацию, но не могу понять, что такое foo, bar

Комментарии:

1. withSession() на мой взгляд, в документах довольно четко объясняется, что именно вы не понимаете? Он сохраняет заданные значения в сеансе: » Вы можете установить данные сеанса в заданный массив, используя withSession метод. Это полезно для загрузки сеанса с данными перед отправкой запроса в ваше приложение. »

2. И ответ 302 означает, что ваш запрос был перенаправлен, но, не видя всего кода, через который должен пройти запрос, никто не сможет вам помочь, мне кажется странным, что у вас есть 3 промежуточных ПО аутентификации на вашем маршруте: auth,login_auth,two_factor_auth , возможно, проверьте, перенаправляет ли один из них ваш запрос.

3. Это означает, что если мне нужно посетить маршрут, на котором реализовано промежуточное ПРОГРАММНОЕ обеспечение. тогда я должен отправить сохраненное значение сеанса? в настоящее время я не понимаю, почему он перенаправляет обратно. Я думаю, потому что пользователь не аутентифицирован.

4. 302 — это перенаправление, и вам также необходимо обрабатывать запросы, не связанные с авторизацией, используйте assertRedirect($uri), будет утверждать, перенаправляется ли ответ на данный URI