2014-12-07 1 views
1

json 데이터를 사용하는 편안한 컨트롤러를 테스트하고 싶습니다. 문제는 데이터를 올바르게 보낼 수 없다는 것입니다. 내가 데이터를 보내려고하는 방법CakePHP3 통합 테스트 및 json 데이터

이는 다음과 같습니다 내 컨트롤러에서

$this->configRequest([ 
    'headers' => [ 
     'Accept' => 'application/json', 
     'Content-Type' => 'application/json' 
    ], 
]); 

$this->post('/api/users', "{'username':'Iason','password':'test'}"); 

debug($this->_response->body()); 

을, 나는 데이터 확인 :

if (empty($this->request->data)) { 
    throw new BadRequestException("No data"); 
} 

체크가 실패를하고 난 다시 오류가 발생합니다.

Postman을 사용하여 API를 테스트하면 모든 것이 정상적으로 작동합니다. 데이터를 배열 (수동 http://book.cakephp.org/3.0/en/development/testing.html#controller-integration-testing에 표시됨)로 보내려고하면 컨트롤러에 요청 데이터가 없습니다. 내가 뭘 잘못하고 있는지 전혀 모르겠다.

답변

3

우선 JSON 데이터가 유효하지 않습니다. 문자열은 작은 따옴표 (')가 아닌 큰 따옴표 (")로 묶어야합니다.

값은 큰 따옴표로 묶은 문자열이나 숫자 또는 참 또는 거짓 또는 null 또는 개체 또는 배열 일 수 있습니다. 이러한 구조는 중첩 될 수 있습니다.

문자열은 백 슬래시 이스케이프를 사용하여 큰 따옴표로 묶인 0 개 이상의 유니 코드 문자 시퀀스입니다. http://www.json.org/

다른 문제

이 아닌 형태로 게시 데이터, 즉 비 application/x-www-form-urlencoded 형식의 POST 본문 데이터가 input 옵션을 통해 설정해야한다는 것입니다 :

$this->configRequest([ 
    'headers' => [ 
     'Accept' => 'application/json', 
     'Content-Type' => 'application/json' 
    ], 
    'input' => '{"username":"Iason","password":"test"}' 
]); 

$this->post('/api/users'); 

는 않을 것 문서에 그 사실을 보여주는 사례가 있다면 상처를줍니다.