如何检查来自POST请求的纯文本响应?

时间:2019-04-09 15:09:38

标签: node.js web-api-testing frisby.js

我正在尝试使用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引发以下错误:

  

失败./test.js    ✕应该创建一个foo资源(17毫秒)

     

●应该创建一个foo资源

     

TypeError:无效的json响应正文:http://localhost:8080/处的“ bar”原因:“ JSON在位置0处的意外令牌b”

有人知道是否可以将每个测试配置为期望使用JSON以外的其他数据格式吗?

1 个答案:

答案 0 :(得分:0)

如果您得到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();
        })
});