chai-graphql npm 版本 建置狀態 開發依賴狀態

用於 Chai 斷言庫的 GraphQL 回應匹配器

可與解析過的 JSON 回應和本機物件回應搭配使用。

安裝

npm install --save-dev chai-graphql

API

方法會從回應中「解包」資料和/或 payload,以減少重複的測試。

  • assert.graphQl(response, [expectedData]) 會對 response.dataresponse.data.payloadexpectedData(如果存在)執行深層相等比較。如果 response.errors 中有任何錯誤,則會擲出例外。回傳 response.data
  • assert.graphQLSubset(response, [subsetOfExpectedData]) 會對 response.dataresponse.data.payload 與 expectedData(如果存在)執行子集匹配。如果 response.errors 中有任何錯誤,則會擲出例外。回傳 response.data
  • assert.graphQLError(response, [errorMatcher]) 如果沒有任何 response.errors,則會擲出例外,並回傳 response.errorserrorMatcher 可以是字串、正規表示式,或是字串或正規表示式的陣列。在字串或正規表示式形式中,錯誤的 message 屬性會由 errorMatcher 進行 match() 測試。在陣列形式中,每個 errorMatcher 會依序針對每個錯誤進行測試。如果匹配器的數量大於或小於錯誤的數量,則會擲出例外。

用法

在您的設定中

import chai from 'chai'
import chaiGraphQL from 'chai-graphql'
chai.use(chaiGraphQL)

在您的 spec.js 中

var goodResponse = {
  data: {
    foo: 'bar'
  }
}

// Passes
assert.graphQL(goodResponse, { foo: 'bar' })
assert.graphQLSubset(goodResponse, { foo: 'bar' })
assert.graphQL(goodResponse)
assert.graphQLSubset(goodResponse)
assert.graphQLSubset(goodResponse, { })
assert.notGraphQLError(goodResponse)
expect(goodResponse).to.be.graphQl({ foo: 'bar' })

// Fails
assert.graphQL(goodResponse, { foo: 'FAIL' })
assert.graphQL(goodResponse, { })
assert.graphQLError(goodResponse)
expect(goodResponse).to.be.graphQLError()

const badResponse = {
  errors: [
    {
      message: 'Error message',
      stack: 'Prints if present'
    },
    new GraphQLError('GraphQL Error Object'),
    new Error('Regular Error')
  ]
}

// Passes
assert.graphQLError(badResponse)
expect(badResponse).to.be.graphQLError()

assert.graphQLError(badResponse, 'Error message')
assert.graphQLError(badResponse, /GraphQL Error Object/)
assert.graphQLError(badResponse, [
  'Error message',
  /GraphQL Error Object/
])

// fails
assert.graphQL(badResponse, { foo: 'bar' })
assert.graphQL(badResponse)
assert.notGraphQLError(badResponse)
expect(badResponse).to.be.graphQl({ foo: 'bar' })
assert.graphQLError(badResponse, 'Rando Error')
assert.graphQLError(badResponse, [ 'Error message' ])