首页 > 解决方案 > 如何验证文件名?

问题描述

我有一个为用户头像返回文件的函数,我想为它创建测试。我想要做的是检查文件的名称。

这是功能:

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 的名称是否等同于“用户名”(这是来自服务器的文件的名称)或“默认”,如果它是默认头像。

标签: perltestingmojolicious

解决方案


不要使用文件路径。使用实际图像。创建两个小的测试图像。它们可以是 2x2 像素的 PNG 文件。也许使它们单一颜色,但不同。有一个是你的默认。

然后将其序列化并将其作为字符串放入您的测试中。运行$t->tx->res->body相同的序列化,并比较这两者。

如果您愿意,您还可以在运行代码之前让测试部署该映像,这样您的应用程序就不会依赖于那里的映像。


推荐阅读