Как проверить имя файла?

#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 Выполните ту же сериализацию и сравните эти две.

Если вы хотите, вы также можете выполнить тестовое развертывание этого образа перед запуском кода, чтобы ваше приложение не зависело от наличия образа.