2014-12-07 4 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"); 
} 

проверка не удалась, и я вернусь ошибкой.

Если я тестирую свой API с помощью Postman, все работает нормально. Если я попытаюсь отправить данные в виде массива (это показано в руководстве http://book.cakephp.org/3.0/en/development/testing.html#controller-integration-testing), у меня также нет данных запроса в контроллере. Я понятия не имею, что я делаю неправильно.

ответ

3

Прежде всего, это недопустимые данные JSON, строки должны быть заключены в двойные кавычки ("), а не одинарные кавычки (').

Значение может быть строкой в ​​двойных кавычках, или числом, или истинным или ложным или нулевым, или объектом или массивом. Эти структуры могут быть вложенными.

Строка представляет собой последовательность из нуля или более символов Юникода, завернутую в двойные кавычки, с помощью обратных слэшей.

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'); 

Не был бы если бы у docs был пример, показывающий это.

Смежные вопросы