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值
任何暗示都将不胜感激。谢谢