Mojolicious命令中如何为控制器人工设置HTTP请求参数
你的需求完全可以实现,Mojolicious 原生支持手动给控制器设置请求参数,不需要自定义 set_http_param 方法。
最简实现方式
控制器的 param 方法本身支持传入「键+值」的形式直接设置请求参数,直接替换你标注问号的行即可:
sub run { my ($self, @args) = @_; $self->app->controller_class('Base::Controller'); my $c = $self->app->build_controller; # 单参数设置 $c->param(id => 1); # 也可批量设置多个参数 $c->param( id => 1, order_amount => 99, pay_type => 'alipay' ); $c->process_order(); }
模拟完整HTTP请求环境
如果你需要更贴合真实请求场景,比如指定请求方法、设置请求头、模拟上传文件等,可以手动构造请求对象绑定到控制器:
sub run { my ($self, @args) = @_; $self->app->controller_class('Base::Controller'); my $c = $self->app->build_controller; # 构造POST请求对象 my $test_req = Mojo::Message::Request->new(method => 'POST'); # 设置请求参数 $test_req->param(id => 1); # 也可直接操作参数集合新增参数 $test_req->params->add(user_id => 10086); # 给控制器绑定请求对象 $c->req($test_req); $c->process_order(); }
其他常用测试环境配置
如果需要绕过数据库依赖,你还可以直接给控制器手动设置其他属性,提前注入本该从数据库查询的结果:
- 手动设置session值:
$c->session(login_user_id => 123); - 手动设置stash变量:
$c->stash(order_info => {id => 1, status => 'pending'}); - 可直接Mock控制器中调用的数据库相关方法,不需要依赖实际存在的数据库表结构。
内容的提问来源于stack exchange,提问作者user4035
相关产品推荐
相关产品推荐

