2016-12-23 8 views
4

私のデータベースの一部のオブジェクトの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ドキュメントを読んできました。これはうまくいくはずですが(私には)見えますが、それだけではありません。何か案は?

ありがとうございます!

+0

'$ basic_ip_node'とは何ですか?あなたは '$ ip_node'を初期化しますが、あなたの投稿データは' $ basic_ip_node'から来ます。 – mob

+0

ああ、それは不要な情報を取り除いている間に私が作ったタイプミスです。私たちが初期化するのは、POSTデータに渡すものです。私は正しい変数名を持っているという質問を編集しました。 –

答えて

0

この動作は、コントローラに渡されるクッキーの改行文字の結果です。私が作成し、とモジョオブジェクト上にauthn /のauthzのためのクッキージャーを装着した

my $jar = Mojo::UserAgent::CookieJar->new; 

$jar->add(
    Mojo::Cookie::Response->new(
     name => "$mojo_cookie_name", 
     value => "$cookie_data", 
     domain => "127.0.0.1", 
     path => "$mojo_cookie_path" 
    ) 
); 

$t->{ua}->{cookie_jar} = $jar; 

しかし$ cookie_dataはそれに余分な改行文字を持っていました。 $ cookie_dataをcookie JARに追加する前にchomp()を実行すると、すべてが期待通りに機能します。私はクッキーに余分な改行文字があるときに、なぜMojoリクエストが非常に失敗したのか分かりません。手動ヘッダーに余分な改行文字があると失敗すると思います。それ以上のことがあれば、私はそれに応じてこの答えを更新/コメントします。

関連する問題