Добре время. Имею следующую разметку
<label class="btn-file btn-first" for="my-file-selector">
<input id="my-file-selector" name="file" type="file">
Load photo
</label>
выглядит это так
Тег input скрыт. Окно выбора файла вызывается при нажатии на label.
При выборе файла, происходит загрузка на сервер при помощи AJAX.
Необходимо написать функциональные и приёмочные тесты для этого функционала.
При написании функциональных тестов, столкнулся с тем, что AJAX отправляется, но возвращается пустой ответ. И не важно, что я отправляю, запрос выполняется нормально. Код функционального теста:
$I->wantTo('check load avatar from file');
$I->loginUser(User::$user['loginUser']);
$I->goToCurrentRoute(General::$URL);
$I->attachFile('file','avatar.jpg');
$I->sendAjaxPostRequest(route(Routes::$post['photoLoad']), ['_token' => csrf_token()]);
$I->seeResponseCodeIs(200);
$I->seeResponseContainsJson(['success' => true]);
Собственно вопрос, возможно ли покрытие тестами такого функционала и как?
Далее, я решил провести приёмочные тесты. И тут я натнулся на зависание теста на шаге добавления файла
$I->wantTo('set my avatar');
$I->amOnPage('/');
$I->amOnPage(Login::$URL);
$I->see('Anmelden');
$I->fillField('email', 'robot@evil.corp');
$I->fillField('password', '01478520');
$I->click('button[type=submit]');
$I->waitForElementVisible('.progress-load');
$I->wait(5);
$I->waitForElementNotVisible('.progress-load');
$I->see('Profile');
$I->see('Load photo');
$I->makeScreenshot('profile');
$I->executeJS("$('.btn-first').click()");
$I->attachFile('#my-file-selector','avatar.jpg');
$I->makeScreenshot('attached');
$I->waitForElementVisible('.progress-load');
$I->wait(5);
$I->waitForElementNotVisible('.progress-load');
Так и не понял почему оно зависает на этом шаге.
Как вообще тестируются такие вещи? Укажите в какую сторону рыть?
спсибо
использую следующее ПО
Codeception PHP Testing Framework v2.2.4
Acceptance Tests
Modules: REST, Laravel5, WebDriver, \Helper\Acceptance, Db
Functional Tests
Modules: \Helper\Functional, Asserts, REST, Laravel5