2017-03-16 5 views
7

GraphQ API를 테스트 할 기능 테스트 스위트를 작성해야한다. 테스트 스위트는 API의 별도의 저장소 및 컨테이너에 있습니다.GraphQl API를 테스트하는 방법은 무엇입니까?

한 가지 방법은 테스트 스위트 내에서 BDD 프레임 워크를 사용하는 것이라고 생각했습니다. 이 Suite는 HTTP 요청을받은 후 모든 BDD 테스트를 실행합니다.

나는 Cucumber.js를 BDD 프레임 워크로 사용할 것을 고려하고있었습니다. npm test이 있다는 것을 알고 있습니다. 나는 어떻게 테스트를 실행할 지 확신하지 못한다. 이런 방식으로 유닛 테스팅 프레임 워크를 사용하는 것은 약간 어색하다고 느낍니다. 이 접근법이 의미가 있습니까?

이와 같은 작업을 수행하기위한 도구는 무엇입니까? 나는 다양한 언어와 도구를 고려하고 있습니다.

+0

충분한 답변을 드릴 수있는 경험이 없지만이 게시물은 나를 도왔습니다. https://medium.com/entria/testing-a-graphql-server-using-jest-4e00d0e4980e#.qohdw3wuz 시도했습니다. 내 구현으로 오이를 구현하는 예제는 여기에있다. https://github.com/RedLeap/swapi-graphql-module/blob/5da487bf28897aa228d937712dabfd6580cb301d/features/planets.feature - 그냥 반복해라. 나는 경험 많은 테스터가 아니라고 생각했다. 이것을 풀어 두지 말고 내 두 센트를 드려라. 질문이 있으시면 알려주세요. :) –

답변

1

원하는 테스트 러너로 npm 테스트를 사용할 수 있습니다. 저는 모카와 차이를 사용하고 있습니다. Jest는 아마도 가장 진보 된 테스트 스위트라고 생각하기 때문에 조금 나아질 것입니다. 엔드 포인트와 마찬가지로 테스트를 작성했습니다.

 it('should be null when user is not logged in', async() => { 
     const query = ` 
      query { 
      user(id: "") { 
       username 
       email 
      } 
      } 
     ` 

    const rootValue = {}; 
    const context = {}; 

    const result = await graphql(schema, query, rootValue, context); 
    const { data } = result; 

    expect(data.user).to.equal(null); 
    }); 

매우 간단한 방법으로 테스트 해보십시오. 또한 관련 사용자를 db에 삽입하는 before 문을 실행합니다. 테스트 스위트를 별도로 유지하는 문제는 db에 직접 액세스해야한다는 것입니다. 불필요한 종속성을 생성하므로 다른 API 호출에 의존해서는 안됩니다. 따라서 테스트가 중단되면 갑자기 근본 원인을 파악하기가 더 어려워집니다.

0

Karate 때문에이 개 특정 기능

의 테스트 GraphQL 응답에 적합 될 일이 상대적으로 새로운 웹 서비스 테스트 자동화 프레임 워크입니다
  • 텍스트 조작 : 그것은 인라인 GraphQL 쿼리 용이, substitute placeholders
  • JsonPath 어설 션 : GraphQL 응답은 JSON이지만 요청 (고정 스키마 없음)에 따라 동적으로 변경되며 깊이 중첩되는 경향이 있습니다. 공수의 기본 JsonPath의 주장은 단지 당신이 필요로하는 덩어리에 집중할 수 있도록, 당신은 여기에

이 좋은 예입니다 매우 읽을 수있는 바로 가기 JSON 양식의 예상 결과 표현할 수 아래 코드 조각과 graphql.feature를 : 가라테는 자바 런타임을 요구에도 불구하고

# you can also read this query from a file 
Given text query = 
""" 
{ 
    pokemon(name: "Pikachu") { 
    id 
    number 
    name 
    attacks { 
     special { 
     name 
     type 
     damage 
     } 
    } 
    } 
} 
""" 
And request { query: '#(query)' } 
When method post 
Then status 200 

# json-path makes it easy to focus only on the parts you are interested in 
# which is especially useful for graph-ql as responses tend to be heavily nested 
* match $.data.pokemon.number == '025' 

# the '..' wildcard is useful for traversing deeply nested parts of the json 
* def attacks = get[0] response..special 
* match attacks contains { name: 'Thunderbolt', type: 'Electric', damage: 55 } 

이 구문은 언어 중립적입니다 Cucumber/Gherkin이며, 당신은 쉽게 기존의 연속 통합 설정에 가라테 테스트 및 reports를 추가 할 수 있습니다. 자바 스크립트 프로그래머는 Karate embeds a JavaScript runtime이 '관대 한'JSON (이중 따옴표가 필요하지 않으며 JSON 키를 따옴표로 묶을 필요가 없음)을 지원하기 때문에 집에서 특히 느낄 것입니다.

면책 조항 : 여기에 dev.