Я хочу протестировать некоторые страницы, на которых есть формы, отправляемые с использованием Javascript Fetch API и объекта FormData.
Функциональность работает хорошо в браузере, но когда я выполняю отправку формы из PEST, конечная точка, получающая запрос, не видит прикрепленную форму данные.
Я сузил его до простого примера, чтобы показать проблему.
Контроллер:
Код: Выделить всё
class TestController
{
public function test(Request $request): View|JsonResponse
{
if ($request->isMethod('POST')) {
return response()->json(['message' => $request->get('test_input', 'No input provided')]);
}
return view('test');
}
}
Код: Выделить всё
Test page
Test
document.getElementById('test-btn').addEventListener('click', () => {
const formData = new FormData();
formData.append('test_input', 'Hello from JS!');
fetch('/test', {
method: 'POST',
body: formData
})
.then(async response => {
const respJson = await response.json();
document.getElementById('response').innerHTML = respJson.message;
});
});
Когда я запускаю следующий PEST-тест...
Код: Выделить всё
it('test js fetch', function () {
$page = visit('/test');
$page->click('Test')
->assertSee('Hello from JS!')
->screenshot();
});
Код: Выделить всё
FAILED Tests\Browser\TestTest > it test js fetch
Expected to see text [Hello from JS!] on the page initially with the url [http://php:47865/test], but it was not found or not visible. A screenshot of the page has been saved to [Tests/Browser/Screenshots/it_test_js_fetch].
at tests/Browser/TestTest.php:7
3▕ it('test js fetch', function () {
4▕ $page = visit('/test');
5▕
6▕ $page->click('Test')
➜ 7▕ ->assertSee('Hello from JS!')
8▕ ->screenshot();
9▕ });
10▕
Кто-нибудь сталкивался с этой проблемой и может порекомендовать решение?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -fetch-api
Мобильная версия