我正在为API编写单元测试。
如果我这样做:
{{1}}
并且API没有返回JSON,然后我得到类似的东西:
SyntaxError:位于0的JSON中的意外标记p 在JSON.parse()
我的测试失败了,而不是在测试中出错。
我可以做的开玩笑测试是什么;
是我收到的可解析为有效JSON的字符串吗?
答案 0 :(得分:6)
我通过添加一个帮助函数解决了这个问题,我找到了here
const isJSON = (str:string) => {
try {
const json = JSON.parse(str);
if (Object.prototype.toString.call(json).slice(8,-1) !== 'Object') {
return false
}
} catch (e) {
return false
}
return true
}
然后能够做到这一点:
expect(isJSON(body)).toBe(true)
答案 1 :(得分:1)
您可以简单地使用Jest's .not.toThrow()
断言JSON解析不会引发错误。
这是我制作的一个示例,该示例断言可以将对象解析为有效的JSON:
it("Produces metadata object that can be parsed to valid JSON", () => {
const meta = articleMetaData(article);
const parseJson = () => {
const json = JSON.stringify(meta);
JSON.parse(json);
};
expect(parseJson).not.toThrow();
});
例如,如果对象具有圆形结构:
var obj = {
a: "foo",
b: obj
}
测试将失败:
Expected the function not to throw an error.
Instead, it threw:
TypeError: Converting circular structure to JSON