我目前正在更新一些有关GraphQL单元测试的文档,我碰到过这句话:
“ GraphQL在后台进行某种类型的强制转换。我们需要在模拟数据中模拟这种类型的强制转换。”
“一个例子是它将bits转换为布尔值。从B2添加包含位的模拟数据时,应在模拟数据文件中将其更改为布尔值,以便单元测试将按预期运行。 “
不幸的是,最初写这篇文章的人已经离开了我们的业务,我了解GraphQL采取了某种类型的强制措施,但是我很想知道为什么这样做?特别是在结果强制期间。有人知道这意味着什么吗?
答案 0 :(得分:1)
来自spec:
在准备给定标量类型的字段时,GraphQL服务器必须遵守标量类型所描述的合同,或者通过强制值或在无法强制值或强制强制导致数据丢失的情况下产生字段错误
GraphQL服务可能决定允许将不同的内部类型强制转换为预期的返回类型。例如,当强制转换类型为Int的字段时,布尔真值可能会产生1或字符串值“ 123”可能会被解析为以10-10 123为单位的值。但是,如果内部类型强制不能在不丢失信息的情况下被合理执行,则它必须引发字段错误。
由于这种强制行为对于GraphQL服务器的客户端来说是不可观察的,因此强制的确切规则留给实现。唯一的要求是服务器必须产生符合期望的Scalar类型的值。
可以在它们各自的部分中找到特定于五个内置标量的其他规则。在这方面,任何其他标量的行为如何取决于每个服务。