Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 验证后测试mojolicous应用程序_Perl_Authentication_Testing_Cookies_Mojolicious - Fatal编程技术网

Perl 验证后测试mojolicous应用程序

Perl 验证后测试mojolicous应用程序,perl,authentication,testing,cookies,mojolicious,Perl,Authentication,Testing,Cookies,Mojolicious,我正在使用Test::Mojo测试mojolicous应用程序JSON端点,其中它有一个端点,根据用户是否经过身份验证返回不同的数据,但是,我似乎无法正确获取未经身份验证的测试部分 Mojolicious应用程序配置为Mojolicious::Plugin::Authentication 我假设可以通过对控制器运行authenticate对后端进行身份验证,然后在从控制器的响应对象提取cookie后,使用相同的test::Mojo实例对后端进行测试 以下是我迄今为止所做的工作: use Find

我正在使用
Test::Mojo
测试
mojolicous
应用程序JSON端点,其中它有一个端点,根据用户是否经过身份验证返回不同的数据,但是,我似乎无法正确获取未经身份验证的测试部分

Mojolicious应用程序配置为
Mojolicious::Plugin::Authentication

我假设可以通过对控制器运行
authenticate
对后端进行身份验证,然后在从控制器的响应对象提取cookie后,使用相同的
test::Mojo
实例对后端进行测试

以下是我迄今为止所做的工作:

use FindBin;
use Test::More;
use Test::Mojo;
use MyApp;

BEGIN {
  $ENV{MOJO_MODE} = 'test';
  $ENV{MOJO_LOG_LEVEL} = 'fatal';
  unshift @INC, "$FindBin::Bin/../../lib", "$FindBin::Bin/../lib";
}

my $t = Test::Mojo->new(MyApp->new);

subtest 'Accounts endpoint' => sub {
  subtest 'Accounts - Unauthenticated' => sub {
    $t->get_ok('/api/account/' . $id)
      ->status_is(200)
      ->content_type_like(qr/application\/json/, 'JSON Contenet Type')
      ->json_has('/account/_id')
      ->json_hasnt('/account/active')
      ->json_hasnt('/account/subscription');
  };

  subtest 'Accounts - Authenticated' => sub {
    my $c = $t->app->build_controller;
    $c->session(expiration => time + 300);
    $c->render;

    $t->ua->on(start => sub {
      my ($ua, $tx) = @_;
      # $ua->cookie_jar->add($cookie);

      $tx->req->cookies({name => $c->res->cookie('mojolicious')->name, value => $c->res->cookie('mojolicious')->value});

      # print Dumper $tx->req->cookies, " <<< request cookie\n";
      # print ">>> ", $_->name for @{$ua->cookie_jar->all};
    });


    if ($c->authenticate('username', 'password')) {
      ok $c->is_user_authenticated, 'User was authenticated';
      $t->get_ok('/api/account/' . $id)
        ->status_is(200)
        ->content_type_like(qr/application\/json/, 'JSON Contenet Type')
        ->json_has('/account/_id')
        ->json_has('/account/active')
        ->json_has('/account/subscription');
    }
  };
};

done_testing();
使用FindBin;
使用测试::更多;
使用Test::Mojo;
使用MyApp;
开始{
$ENV{MOJO_MODE}='test';
$ENV{MOJO_LOG_LEVEL}='fatal';
unshift@INC,“$FindBin::Bin/../../lib”,“$FindBin::Bin/../lib”;
}
my$t=Test::Mojo->new(MyApp->new);
子测试“帐户端点”=>sub{
子测试“帐户-未经验证”=>sub{
$t->get_ok('/api/account/'.$id)
->状态为(200)
->内容类型(qr/application\/json/,“json内容类型”)
->json_有('/account/_id'))
->json_hasnt('/account/active')
->json_hasnt('/account/subscription');
};
子测试“帐户-已验证”=>子测试{
我的$c=$t->app->build\u控制器;
$c->session(过期=>时间+300);
$c->渲染;
$t->ua->on(开始=>sub{
我的($ua,$tx)=@;
#$ua->cookie\u jar->添加($cookie);
$tx->req->cookies({name=>$c->res->cookie('mojolicous')->name,value=>$c->res->cookie('mojolicous')->value});
#打印转储程序$tx->req->cookies,“>”,$\->name for@{$ua->cookie\u jar->all};
});
如果($c->authenticate('username','password')){
ok$c->U用户是否已验证,“用户已验证”;
$t->get_ok('/api/account/'.$id)
->状态为(200)
->内容类型(qr/application\/json/,“json内容类型”)
->json_有('/account/_id'))
->json_有('/account/active')
->json_有('/account/subscription');
}
};
};
完成测试();
我认为问题一旦通过身份验证,会话cookie值应该更改,但在我的情况下cookie保持不变,我相信这会导致请求发送未经身份验证的cookie值,因此资源无法工作

问题是,在对控制器进行身份验证后,如何检索cookie值

任何暗示都将不胜感激。谢谢