Node.js 如何检查POST请求的纯文本响应?
我正试图使用frisby.js为端点指定一个API测试,该端点返回对有效POST请求的纯文本响应。但是,我在让frysby.js接受非JSON响应文档时遇到了问题。每当响应返回非JSON内容时,抛出一个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
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。