#perl #testing #mojolicious
#perl #тестирование #mojolicious
Вопрос:
У меня есть функция, которая возвращает файл для аватара пользователя, и я хочу создать для него тесты. Что я хочу сделать, так это проверить имя файла.
Это функция:
sub get_avatar {
my $self = shift;
my $username = $self->stash('username');
my $home = Mojo::Home->new;
$home->detect('Project');
my $path = $home->child('users', 'avatars', "$username");
$path = $home->child('img', 'default.png') if !(-e $path);
$self->render_file('filepath' => $path);
}
И это тест:
$file = $t->get_ok('/user/username/avatar')->status_is(200);
//use Data::Dumper;
//diag Dumper($file);
ok $file =~ 'username';
Я хочу проверить, эквивалентно ли имя $file ‘username’ (которое является именем файла с сервера) или ‘default’, если это аватар по умолчанию.
Комментарии:
1. Согласно документации , возвращаемое значение
$t->get_ok()
является тестовым объектом$t
, который позволяет проводить тесты цепочки.2. /user/username/avatar — это маршрут, который возвращает изображение для фотографии профиля, и я не знаю, как я могу проверить имя этого файла, чтобы узнать, правильное ли оно.
3. Может быть, вы можете использовать
content_disposition
параметр для указания имени файла? Смотрите документацию . Здесь больше информации оContent-Disposition
заголовке
Ответ №1:
Не работайте с путем к файлу. Работайте с фактическим изображением. Создайте два небольших тестовых изображения. Это могут быть файлы PNG размером 2×2 пикселя. Может быть, сделать их одного цвета, но разные. Пусть он будет вашим по умолчанию.
Затем сериализуйте это и поместите в свой тест в виде строки. $t->tx->res->body
Выполните ту же сериализацию и сравните эти две.
Если вы хотите, вы также можете выполнить тестовое развертывание этого образа перед запуском кода, чтобы ваше приложение не зависело от наличия образа.