2012-12-11 5 views
2

Mojolicious 프레임 워크를 사용하여 개발 한 내 애플 리케이션 용 테스트 케이스를 작성하고 있습니다. 나는 REST 호출에 대한 적절한 응답을위한 경로를 테스트하고있다. JSON을 서버와 클라이언트 간의 통신 수단으로 사용합니다. GET, POSTDELETE 요청을 테스트하기 위해 필자는 다음과 같은 기능 POST: post_json_ok()
DELETE: delete_ok()mojolicious에서 JSON PUT 요청 테스트

GET : get_ok()
를 사용하지만 PUT 위해 나는 put_ok()을 사용할 수 없습니다입니다. 그리고 put_ok (내 사용)의 예는
my $t = Test::Mojo->new;
$t->put_ok('this/is/url/to/resource'=>{ "element" => "modified value"})->status_is(204)


내가 때마다 (400)와 그래서 테스트가 실패 나쁜 요청 상태를 얻을 수있을 것이다. 내 응용 프로그램 테스트에 Test::Mojo을 사용합니다.

추가 정보 :

$t->put_ok('http://localhost:3000/application/instances/system/test'=>{"model" => "testing put"})->status_is(204);

이 시도 PUT 요청에 대한 정확한 테스트입니다.
model은 자원 test의 속성이며 testing put으로 변경하려고하고 예상 상태 응답은 204입니다.

컨트롤러에 매핑이 경로는 system 컨트롤러에서 update_sys 메서드를 호출하고 그 자원이있는 방법이다 $r->route('/application/instances/system/:id, id => qr/[A-Za-z0-9 ]+/ -> via('put') ->to(controller => 'system', action => 'update_sys');
하여 수행됩니다.

+0

'put_ok'가 보이지 않습니다. 'get_ok'가 표시됩니다. –

+1

@Bill Ruppert
[이 링크] (https://metacpan.org/module/Test::Mojo)에는 put_ok에 대한 설명이 있습니다. –

답변

4

실제로 IRC의 SRI와의 토론 후 그는 자신이 필요로하는 것과 거의 동일한 예를 지적했습니다 documentation에 있습니다.

# Test custom transaction 
my $tx = $t->ua->build_json_tx('/user/99' => {name => 'sri'}); 
$tx->req->method('PUT'); 
$t->tx($t->ua->start($tx)) 
    ->status_is(200) 
    ->json_is('/message' => 'User has been replaced.'); 

이렇게하면 효과가 있습니다.

추신 : 지금이 목적을 위해 청소기 구문, 새로운 request_ok 방법이있을 것이다 Mojolicious의 다음 릴리스 (버전 3.66) :

당신이 토론은 일부 진전을 가져왔다 알고 관심을 가질 수 있습니다. 위의 예는 다음과 같이 다시 쓸 수 있습니다.

my $tx = $t->ua->build_json_tx('/user/99' => {name => 'sri'}); 
$tx->req->method('PUT'); 
$t->request_ok($tx) 
    ->status_is(200) 
    ->json_is('/message' => 'User has been replaced.'); 
+0

고맙습니다. @Joel, 이것이 제가 찾고 있던 것입니다. request_ok 메소드도 기대합니다. 매우 감사! –

+1

[3.66] (https://metacpan.org/release/SRI/Mojolicious-3.66/)이 출시되었습니다! 'request_ok' 당신의 심장 콘텐츠에! –

+0

이 답변은 최근에 내가 상상할 것이라고 생각 했으므로 upvoted되었습니다. 모든 요청 유형 테스트 메소드는 [컨텐츠 생성기] (http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook#Content-generators)를 사용할 수 있습니다. –

1

'this/is/url/to/resource'에 대한 경로 정의를 공유 할 수 있습니까? 서버가 400을 반환하기 때문에 App에있는 Mojo :: Controller가 보내는 내용을 이해하지 못하는 것 같습니다.

+0

내 컨트롤러가 내가 보내는 것을 이해하고 있음을 확신 할 수 있습니다. 이 테스트가 없으면 REST 클라이언트를 사용하여 'PUT'으로 리소스를 수정하면이를 수행 할 수 있고 400 응답을 얻지 못합니다. 'PEST' 요청을 테스트하기 위해'TEST :: Mojo' 모듈을 사용할 때만 오류가 발생합니다. 경로 정의에 대해 자세히 설명해 주시겠습니까? 경로가 컨트롤러에 매핑되는 방식 또는 실제 경로 자체를 원하는 방식을 의미합니까? 어떤 경우이든, 나는 경로가 적절히 정의되어 있는지 확신합니다. –

+0

나는이 경로가 컨트롤러에서 매핑 된 방법을 우리에게 보여 주려했다. 도움을 요청할 때 일반적으로 OP가 주어진 문제에 해당하는 코드를 표시하는 데 도움이됩니다. 가정 된 put_ok에 대한 전화가 잘 보였으므로 도움을 줄 것으로 예상되는 사람들은 일반적으로 추가 정보가 필요합니다. 믿음과 확신을 가지고 이러한 것들을하는 것은 대개 시간 낭비로 이어집니다. –

+0

고맙다 @ 폴, 나는 당신의 제안 후에 추가 정보를 추가했다. –