Как проверить ответ в виде простого текста на запрос POST? - PullRequest
1 голос
/ 09 апреля 2019

Я пытаюсь использовать frisby.js, чтобы указать тест API для конечной точки, которая возвращает простой текстовый ответ на действительный запрос POST.Однако у меня возникают проблемы с получением frysby.js документов, не поддерживающих JSON.Всякий раз, когда ответ возвращает содержимое, отличное от JSON, выведите TypeError из-за 'Unexpected token b in JSON at position 0'.

. Например, я отправляю запрос HTTP POST с приведенным ниже документом JSON, который, как ожидается, вернет ответс открытым текстом со строкой bar.

{
    "foo":{
        "name":"bar"
    }
}

Вот модульный тест, который я написал для проверки ответа:

it('should create a foo resource', function () {
  return frisby.post('http://localhost:8080/', 
      {
        "foo":{
          "name":"bar"
        }
      })
    .expect('status',201);
});

К сожалению, возникает следующая ошибкаfrisby.js при запуске теста:

FAIL ./test.js ✕ должен создать ресурс foo (17мс)

● должен создать ресурс foo

TypeError: Недопустимое тело ответа json: 'bar' в http://localhost:8080/ причина: 'неожиданный токен b в JSON в позиции 0'

Кто-нибудь знает, возможно ли настроить каждый тестожидать какой-то другой формат данных, кроме JSON?

1 Ответ

0 голосов
/ 10 апреля 2019

Если вы получаете JSON + что-то, то разбиваете jsonTypes в двух форматах, например, один для JSON объекта и один для другого, например, массив с JSON объектами.а затем наложите на них ожидаемые условия.

Это может помочь вам:

const frisby = require('frisby');
const Joi = frisby.Joi;

frisby.globalSetup({
    headers : {
        "Accept": "application/json", 
        "content-type" : "application/json",
    }
});

it("should create a foo resource", function () {
    frisby.post("http://localhost:8080/")
        .expect("status", 200)
        .expect("header", "content-type", "application/json; charset=utf-8")
        .expect("jsonTypes", "data.foo", {
            "name": Joi.string()
        })
        .then(function(res) { // res = FrisbyResponse object
            var body = res.body;
            body = JSON.parse(body);

            expect(body.data.foo.name).toBeDefined();
        })
});
...