无法找出模拟JS对象的方法

时间:2018-08-17 22:37:13

标签: javascript graphql

我已经建立了以下Graphql模式,但是我无法弄清楚如何为一些虚假数据建立JS对象。有人可以帮我弄清楚我在做什么错吗?

// GraphQL schema
const schema = buildSchema(`
  type Query {
    apps: [App]
  }
  type App {
    id: ID!
    show: Show
    name: String
    url: String
    author: String
    price: Float
    image: String
  }
  type Show {
    id: ID!
    name: String
    airDate: String
    users: [User]
  }
  type User {
    id: ID
    name: String
    email: String
  }
`);

这是我嘲笑的东西,但它不起作用

module.exports = {
  apps: [
    {
      id: 1,
      show: 1,
      name: 'App 1',
      url: 'http://google.com',
      author: 'John',
      price: '0.00',
      image: 'http://img.vibethemes.com/VeryVibe-125x125.png'
    },
    {
      id: 2,
      show: 1,
      name: 'App 2',
      url: 'http://yahoo.com',
      author: 'Bob',
      price: '2.99',
      image: 'http://img.vibethemes.com/VeryVibe-125x125.png'
    }
  ],
  shows: [
    {
      id: 1,
      name: 'This is a cool show'
    }
  ]
}

但这给我一个错误。我认为也许我在某个地方输入了错误的属性名称。感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您的架构show类型中的App字段直接引用了另一种类型,即Show类型;但是,您的JS模拟数据仅包含对show对象的id引用。

这里确实有两个选择(如果您绝对对这种模式和JS数据有所了解):

  1. 保持架构不变,但是更改JS数据以遵循这样的架构定义,也许是这样:

    module.exports = {
        apps: [
          {
             id: 1,
             show: {
                 id: 1,
                 name: 'This is a cool show'
             },
             name: 'App 1',
             url: 'http://google.com',
             author: 'John',
             price: '0.00',
             image: 'http://img.vibethemes.com/VeryVibe-125x125.png'
          }, // etc. etc.
    

由于您是直接通过show: Show引用架构中的对象,因此实际上需要为架构提供适当嵌套的数据结构。应当注意,对于这种特定的数据结构(取决于您的实现),您可能需要向App.show添加一个简单的字段级解析器,以适当地返回嵌套的Show数据。

  1. 如果您不需要访问有关Show对象的信息,而只需要一个id来引用以供将来查询,则可以将模式更改为只需要一个简单的{{ 1}}作为ID的类型解析度:

    App.show

在某些情况下,能够深入挖掘嵌套数据是有意义的,但是,如果您真的不需要这样做,就不要给自己做额外的工作。

总而言之,希望对您有所帮助。

答案 1 :(得分:0)

也许您可以使用easygraphql来解决这一挑战!可以使用多个软件包:

  1. easygraphql-mock:如果您想返回该类型的完整模拟,则可以使用此包,并且不必为此创建每种夹具。

  2. easygraphql-tester:类似于easygraphql-mock,但不同之处在于您可以返回查询的模拟,请检查docs