当前位置: 首页 > 知识库问答 >
问题:

是否有一种方法来测试响应是否包含在架构中?

谷梁子昂
2023-03-14

在空手道中,我希望有一个模式变量,它是响应数据的超集,这样我就可以用相同的模式测试多个请求。

这对于GraphQL应该特别有用,因为请求本身定义了返回的字段。

预期模式:

{
   id: '#notnull',
   name: '#notnull',
   description: '##string',
   nonNullStringField: '#string'
   ...
}
Given url ...
When request ...
Then match response.data <contained in> '#(mySchema)'

回答数据:

{
   id: 'someId',
   name: 'some name'
}

在本例中,响应返回的所有键。数据应该在架构中,但架构中的任何键都不在响应中。数据应该被忽略。

在空手道中有没有办法做到这一点,或者有没有计划在将来增加这一功能?

编辑:更新了示例,因为唯一遗漏的属性是一个可为空的属性。

共有1个答案

童华池
2023-03-14

我不认为需要增强,因为可选标记###foo就是为此而设计的,并且已经可以工作了:

* def schema = { id: '#notnull', name: '#notnull', description: '##string' }
* def response = { id: 'someId', name: 'some name' }
* match response == schema

编辑:但由于您希望以“通用”方式将模式限制为响应中的键,因此可以执行以下操作:

* def expected = {}
* def fun = function(k, v){ expected.put(k, schema[k]) }
* eval karate.forEach(response, fun)
* match response == expected

您应该能够轻松地创建一个可重用的JS或Java实用程序来实现上述功能。我不赞成添加另一个语法/match关键字的几个原因是,嵌套的JSON可能有一些有趣的边缘情况,这将使它变得复杂。我不想把match进一步复杂化。正如我在评论中所说的,IMO模式验证是您在GraphQL中最不需要测试的东西,它几乎是有保证的。这是两年来第一次有人要求这样做,所以就这样。你可以考虑提交一份公关课程:

 类似资料:
  • 问题内容: 我经常发现自己需要过滤a 或使用谓词来检查给定字段是否具有给定值。 比如说我有这个POJO: 我想根据的值过滤对象的: 是否会有一种方便的方法来为该方法生成谓词?我注意到有,但不符合需要。 我可以很容易地这样写: 并将其用作: 但我希望尽可能重用JDK中的现有方法。 问题答案: 没有内置的工厂方法,您可以通过查看JFC中的所有用法并查找“ …中返回谓词的方法” 来轻松检查。除了自身内部

  • 问题内容: 因此,我敢肯定那里有类似的东西,但是我一直在寻找一个小时,却没有找到我真正想要的东西。说我有一堂课,看起来像这样: 我该如何做这样的工作? 问题答案: 使用Mockito,您可以像这样 监视真实对象 : 有一些陷阱,因此也请查看相关文档。

  • 本文向大家介绍ElasticSearch是否有架构?相关面试题,主要包含被问及ElasticSearch是否有架构?时的应答技巧和注意事项,需要的朋友参考一下 ElasticSearch可以有一个架构。架构是描述文档类型以及如何处理文档的不同字段的一个或多个字段的描述。Elasticsearch中的架构是一种映射,它描述了JSON文档中的字段及其数据类型,以及它们应该如何在Lucene索引中进行索

  • 问题内容: 如何测试Flask视图生成的响应是JSON? 问题答案: 从Flask 1.0开始,会将响应数据解析为JSON或引发错误。 将内容类型设置为。此外,您可以尝试将响应数据解析为JSON。如果解析失败,则测试将失败。 通常,仅凭此测试是没有意义的。您知道它是JSON,自返回以来没有错误,并且已经通过Flask进行了测试。如果它不是有效的JSON,则在序列化数据时会收到错误消息。

  • 也许这是一个容易被删除的问题,但以防万一。 我最近在我的服务上执行注释方法时,怀疑这些方法是否应该包含在服务的接口上。 但是,另一方面,我的服务上有一个公共方法,但它不包括在接口上,出于某种原因,这对我来说很难闻(也许这只是一种习惯)。 那么,怎么办呢?这方面有什么惯例吗?

  • 我可以检查一个帐户是否是一个广告组的成员,但有没有办法告诉一个帐户是否属于一个OU?我想搜索由你而不是由广告组,我不确定如果这是可能的。下面是我如何搜索一个广告组。