Плагин Grails Canoo Webtest: invoke() не может отправить данные JSON в запросе POST

Я оцениваю Canoo Webtest для автоматической интеграции / функционального тестирования как плагин Grails.

У меня есть приложение REST, которое я пытаюсь протестировать, но Canoo Webtest , похоже, неправильно отправляет данные JSON в запросе POST. Мой тестовый код, как показано ниже

invoke( description:"Add a product to shopping cart", 
        url:'shoppingCart/add', method:'POST', 
        content:'{"class":"shop.service.Product", "name":"A product", "description":"Manufactured by X", "price":99.9}'
        //contentFile: '../product.json'
        )

Тело запроса является пустым, независимо от того, использую ли я метод contentFile или вставляю данные как атрибут содержимого. Отчет о тестировании показывает, что данные были отправлены правильно, но на странице ошибки отображается сообщение об ошибке "JSONException: отсутствует значение. в символе 0 из '. Данные JSON в ответ на запрос GET возвращаются нормально.

Я протестировал ту же функциональность с curl, и она отлично работает. Что-то мне не хватает в настройке Canoo Webtest?

Благодарю.

РЕДАКТИРОВАТЬ: я использую Grails 1.3.7 в случае, если это имеет какое-либо значение

1 ответ

Решение

ХОРОШО. Я начал просто экспериментировать с invoke(), и кажется, что установка атрибута значение soapAction в true делает свое дело.

Я понятия не имею, почему это работает. Документация invoke() для атрибута говорит

soapAction
  Required? no
  If the HTTP method is POST and is in fact a SOAP POST request, 
  this allows the SOAP Action header to be set. Ignored for GETs.

Видимо, он устанавливает необходимый заголовок запроса. Не проверял, какой.

Спасибо за чтение:)

Пока не могу пометить этот ответ как правильный, но сделаю это, когда это возможно.

Другие вопросы по тегам