You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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插件

  1. 在Insomnia偏好设置 > 插件中安装insomnia-plugin-ajv插件
  2. 修改响应后脚本如下:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:53:18