替换 graphql 中的占位符会忽略枚举和字符串化

Replace placeholder in graphql ignores enums and stringifies

我正在读取一个 graphql 查询并将其存储在一个变量中,之后我在存储的 graphql 中替换了一个变量。替换是字符串化的,虽然里面有一个枚举。

query() {
  blabla(
    varToReplace: < varToReplace >
    queryOptions: {}
  ) {
    boemba {
      id
      )
    }
  }
}

我的阅读场景部分如下所示

...
  Given def query = read(karate.properties['user.dir'] + myGraphQL)
  *replace query. varToReplace = [{value: "boemba", matching: ONLY}]
...

但实际执行的查询并没有在对象的匹配键中包含ONLY,而是字符串化值“ONLY”。

query() {
  blabla(
    varToReplace: [{"value":"boemba", "matching":"ONLY"}]
  ) {
    boemba {
      id
      )
    }
  }
}

有没有办法将值替换为与提供的值完全相似,而不是全部字符串化?

replace 关键字处理纯字符串,不支持 Java 或 JS 类型。所以试试这个(注意单引号):

* replace query.varToReplace = '[{ value: "boemba", matching: ONLY }]'

请注意,如果内置 replace 不适合您,您可以编写自己的 JS 实用函数(甚至 Java)。