私のデータベースの一部のオブジェクトのREST APIになるシンプルなMojoliciousアプリケーションを作成しています。新しいオブジェクトの作成をテストしようとしていますが、データをオブジェクトコレクションにPOSTしています。ここに私のテストの基本的な構造がある::モジョスクリプト:上記の方法で送信されたときにTest :: Mojo post_okがPOSTデータを正しく読み込めない
use Mojo::Base -strict;
use Test::More;
use Test::Mojo;
use strict;
use warnings;
my $ip_node = {ipname => 'ip_alias.subdomain.company.com', ipservice => 'reserved', ipaddress => '192.168.0.1'};
my $t = Test::Mojo->new('Tools');
$t->post_ok('/tools/ipadmin/nodes' => {Accept => 'application/json'} => form => $ip_node)->status_is(201);
done_testing();
しかし、何らかの理由で、モジョコントローラは、POSTデータを読み込むことができません。これをデバッグするには、私のコントローラに私が要求に応答するために以下の行を持っている:出力は、これらの3つの出力の1の間で変化し
$ prove -v -I /path/to/workspace/Tools/lib t/basic.t
:私は介してテストスクリプトを実行すると
my $c = shift;
print "All params: " . $c->req->params . "\n";
print "IP Name: " . $c->req->param("ipname") . "\n";
print "IP Service: " . $c->req->param("ipservice") . "\n";
print "IP Address: " . $c->req->param("ipaddress") . "\n";
証明。ほとんどの場合、4つのprintステートメントはすべて空ですが、時にはCRLF + POSTデータ(最後の2文字が取り除かれた、おそらくはcontent_lengthを食べているCRLFから)、さらにまれにHTTPヘッダーのcontent_lengthが出力されます。
All params: %0D%0Aipaddress=192.168.0.1&ipname=ip_alias.subdomain.company.com&ipservice=reserv
IP Name: ip_alias.subdomain.company.com
IP Service: reserv
IP Address:
All params: User-Agent%3A+Mojolicious+%28Perl%29%0D%0AHost%3A+127.0.0.1%3A35611%0D%0AAccept-Encoding%3A+gzip%0D%0A=
IP Name:
IP Service:
IP Address:
All params:
IP Name:
IP Service:
IP Address:
誰もこのタイプの動作を以前に見たことがありますか?私のpost_ok構文が間違っていますか?私はTest :: MojoのMojoドキュメントを読んできました。これはうまくいくはずですが(私には)見えますが、それだけではありません。何か案は?
ありがとうございます!
'$ basic_ip_node'とは何ですか?あなたは '$ ip_node'を初期化しますが、あなたの投稿データは' $ basic_ip_node'から来ます。 – mob
ああ、それは不要な情報を取り除いている間に私が作ったタイプミスです。私たちが初期化するのは、POSTデータに渡すものです。私は正しい変数名を持っているという質問を編集しました。 –