Небольшое вступление:
У нас много написанных на Yii2 крупных и средних проектов. Проблема стара как мир: нужно тестирование, для сокращения времени поддержки существующих приложений. В тестах мы понимаем только то, что они нужны как воздух ;)
- Решил использовать Codeception,
- Развернули, сделал базовые тесты, +-понимаю где что лежит и зачем.
- Развернул проект специально с багом, который и пытаюсь отловить но не получается - тест завершается успешно.
Насущные вопросы:
- Есть сайт с товарами, к товарам есть лейблы (аля акция, скидка и т.п.) Выглядит это так:
joxi.ru/4AkOBRPfMzdVnA Слева отображение на сайте, справа форма для редактирования.
- Баг который пытаюсь отловить, (картинка к стикеру обязательна) - при редактировании уже существующего стикера, и сохранении без изменений - выдается ошибка: "Необходимо заполнить «Изображение»." Скрин шот:
joxi.ru/ZrJq8oLH14X04A
- Код теста выглядит так:
$I->amOnPage('/admin/products/site-stickers/update/5');
$I->attachFile('#sitestickers-image', 'lace.png');
$I->See('StickerForTest');
$I->click('Сохранить');
$I->dontSeeElement('.has-error');
- Результат теста: ✔ SiteStickersCest: Edit correct sticker (0.09s)
*В модели используется behavior, ничего не сообразил кроме его детачить (в противном случае error status 0 - файл загружен, но выдает ошибку (видимо из-за необходимости дальнейших с ним манипуляций)):
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
if (YII_ENV=='test') {
$model->detachBehavior('photo');
}
$model->save( false );
return $this->redirect(['index']);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
- Подскажите, что делаю не так?
- - Задача покрыть проект не полностью тестами, а тестировать основной критичный функционал,
- - Хотелось бы полностью тестировать загрузку картинки, ее дальнейшую обработку, запись в базу модели, и проверку ее записи.
Спасибо!