#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▕ }
27▕
1 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