1

我正在尝试使用 frisby.js 为端点指定 API 测试,该端点返回对有效 POST 请求的纯文本响应。但是,我在让 frysby.js 接受非 JSON 响应文档时遇到问题。每当响应返回非 JSON 内容时,抛出一个TypeErrordue to 'Unexpected token b in JSON at position 0'

例如,我正在发送一个带有如下所示 JSON 文档的 HTTP POST 请求,预计将返回一个带有字符串的纯文本文档的响应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 资源(17ms)

● 应该创建一个 foo 资源

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

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

4

1 回答 1

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();
        })
});
于 2019-04-10T05:40:54.053 回答