Node.js 如何检查POST请求的纯文本响应?

Node.js 如何检查POST请求的纯文本响应?,node.js,web-api-testing,frisby.js,Node.js,Web Api Testing,Frisby.js,我正试图使用frisby.js为端点指定一个API测试,该端点返回对有效POST请求的纯文本响应。但是,我在让frysby.js接受非JSON响应文档时遇到了问题。每当响应返回非JSON内容时,抛出一个TypeError,原因是“JSON中位置0处的意外标记b” 例如,我正在发送一个HTTP POST请求,其中包含如下所示的JSON文档,它将返回一个带有字符串bar的纯文本文档的响应 { “foo”:{ “名称”:“酒吧” } } 下面是我为验证响应而编写的单元测试: it('应该创建一个fo

我正试图使用frisby.js为端点指定一个API测试,该端点返回对有效POST请求的纯文本响应。但是,我在让frysby.js接受非JSON响应文档时遇到了问题。每当响应返回非JSON内容时,抛出一个
TypeError
,原因是
“JSON中位置0处的意外标记b”

例如,我正在发送一个HTTP POST请求,其中包含如下所示的JSON文档,它将返回一个带有字符串
bar
的纯文本文档的响应

{
“foo”:{
“名称”:“酒吧”
}
}
下面是我为验证响应而编写的单元测试:

it('应该创建一个foo资源',函数(){
返回飞盘。邮政编码:http://localhost:8080/', 
{
“foo”:{
“名称”:“酒吧”
}
})
.expect(“状态”,201);
});
不幸的是,当我运行测试时,frisby.js抛出了以下错误:

失败。/test.js ✕ 应创建一个foo资源(17ms)

● 应该创建一个foo资源

TypeError:json响应正文无效,原因为:“位置0处json中的意外令牌b”


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

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

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

您检查的响应为JSON格式或纯文本。您检查的响应为JSON格式或纯文本。不幸的是,API返回单个文本字符串。你知道frisby.js是否允许用户在不调用任何反序列化程序的情况下访问原始HTTP响应吗?我从未在不调用任何反序列化程序的情况下使用过。我需要测试一个返回明文响应体的API,显然Frisby会在任何非JSON响应上抛出错误。请看一次:REST API客户端不需要JSON。客户端通过
Accept
标题指定所需的输出类型。该注释只提到客户机需要有效的JSON,但仅当客户机需要JSON时。在我的示例中,客户机需要纯文本,如果可以将测试配置为需要纯文本或对原始响应数据运行测试,那就更好了。如果客户机希望使用plaintest,那么测试失败是没有意义的,因为响应无法转换为有效的JSON。不幸的是,API返回一个文本字符串。你知道frisby.js是否允许用户在不调用任何反序列化程序的情况下访问原始HTTP响应吗?我从未在不调用任何反序列化程序的情况下使用过。我需要测试一个返回明文响应体的API,显然Frisby会在任何非JSON响应上抛出错误。请看一次:REST API客户端不需要JSON。客户端通过
Accept
标题指定所需的输出类型。该注释只提到客户机需要有效的JSON,但仅当客户机需要JSON时。在我的示例中,客户机需要纯文本,如果可以将测试配置为需要纯文本或对原始响应数据运行测试,那就更好了。如果客户机希望使用plaintest,那么测试失败是没有意义的,因为响应无法转换为有效的JSON。