自定义针对 graphql-tools 中的类型定义的模拟数据

Posted

技术标签:

【中文标题】自定义针对 graphql-tools 中的类型定义的模拟数据【英文标题】:Customize the mock data defined against the types in graphql-tools 【发布时间】:2021-09-24 01:48:19 【问题描述】:

我正在使用 graphql-tools 模拟我的 UI(create-react-app)功能测试。我对 MockList 有疑问

目前,我正在按类型进行模拟,其中一个属性是数组,但我仍然需要能够自定义列表中的元素

例如我有一个 LineItem 类型,它的模拟定义为

const LineItem = () =>
  (
    name: 'Item name'
   as LineItemType)

并且购物车类型有一个LineItem列表

const Cart = () =>
  (
    id: 'cart-id',
    lineItems: [...new Array(2)],
   as ActiveCartType)

有没有办法让购物车中的 2 件商品的商品名称不同?

我试图像这样映射数组

const Cart = () =>
  (
    id: 'cart-id',
    lineItems: [...new Array(2)].map(i => (...i, id: '123', name: 'new item name')),
   as ActiveCartType)

但是 name 在模拟结果中没有改变。它仍然设置为Item name。只有id 更改为123。我在这里遗漏了什么吗?

【问题讨论】:

【参考方案1】:

来自graphql-tools/mocking的文档

我们使用了casual,一个用于javascript 的假数据生成器,这样每次调用该字段时我们都能得到不同的结果。如果您打算使用数据进行测试,您可能希望使用假对象集合或始终使用一致种子的生成器。

从您的代码中,您可以将 name 分配给一个生成器函数,该函数将唯一名称添加到该字段。

  const LineItem = () =>
  (
    name: functionGoesHere()
   as LineItemType)

为模拟生成生成数据的两个库是,

Casual library Faker.js Library

【讨论】:

以上是关于自定义针对 graphql-tools 中的类型定义的模拟数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用cognito在android中指定自定义错误消息

vue props自定义类型检查

“graphql-tools”中的嵌套解析器不起作用

angular 2+ 中的自定义输入类型

如何在 Play Framework v2 中指定自定义数据库连接参数以进行测试?

php 定制器中的自定义调色板#cust #reg