Insomnia执行JSON Schema校验时报错:Invalid Chai property: jsonSchema
Insomnia响应后脚本JSON Schema校验报错解决方法
问题场景
尝试在Insomnia响应后脚本中用预定义JSON Schema校验接口返回,编写脚本如下:
var statisticsSchema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Generated schema for Root", "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } insomnia.test('Response corresponds to json schema', () => { const jsonBody = insomnia.response.json(); insomnia.expect(jsonBody).to.be.jsonSchema(statisticsSchema); });
运行后抛出错误:
Error: Invalid Chai property: jsonSchema
虽找到声称实现该功能的PR,但内置断言库不识别jsonSchema方法,官方文档也无相关说明。
原因分析
你提到的PR并未合并到Insomnia正式版本,或当前使用的Insomnia版本未集成该功能。Insomnia内置的Chai断言库默认没有jsonSchema扩展方法,直接调用会触发报错。
解决方案
可通过手动引入AJV(JSON Schema校验库)实现需求,提供两种可行方案:
方案1:使用Insomnia插件
- 在Insomnia偏好设置 > 插件中安装
insomnia-plugin-ajv插件 - 修改响应后脚本如下:
var statisticsSchema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Generated schema for Root", "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } insomnia.test('Response matches JSON Schema', () => { const jsonBody = insomnia.response.json(); const validate = require('ajv').default(); const isValid = validate(statisticsSchema, jsonBody); if (!isValid) { throw new Error(`Schema validation failed: ${JSON.stringify(validate.errors)}`); } });
方案2:动态引入AJV CDN(无插件依赖)
var statisticsSchema = { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Generated schema for Root", "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } insomnia.test('Response matches JSON Schema', async () => { // 动态加载AJV库 const ajvScript = await fetch('https://cdn.jsdelivr.net/npm/ajv@8.12.0/dist/ajv.min.js'); const ajvCode = await ajvScript.text(); eval(ajvCode); const jsonBody = insomnia.response.json(); const validate = new Ajv().compile(statisticsSchema); const isValid = validate(jsonBody); insomnia.expect(isValid).to.be.true; if (!isValid) { console.error('Validation errors:', validate.errors); } });
内容的提问来源于stack exchange,提问作者mfol
相关产品推荐
相关产品推荐

