我正在尝试使用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以外的其他数据格式吗?
答案 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();
})
});