GraphQL 끝점에 대한 400 개의 잘못된 요청 (테스트 쿼리에 문제가 있습니까?)

가브리엘 쿤켈

나는 돌연변이를 만드는 방법에 대한 GraphQL 문서를 주로 따르고 있습니다 . 이것은 GraphQL로 작업하는 첫날입니다. 댓글에 대한 엔드 포인트를 만들고 싶습니다.

문제 분리

Mocha 에서 400 개의 "Bad Request"받고 supertest있으며 GraphiQL을 실행하려고하면 "Query root type must be provided"라는 오류 배열에 메시지가 표시됩니다. ...하지만 내가 하고 포함 rootValue.

여기에 이미지 설명 입력

문제가 될 수있는 한 곳은 buildSchema.

// imports (...working fine)

// Comment Interface for TypeScript is here ...and working
// ...

// gaphql schema (The problem could be here.)
const schema = buildSchema(`
    input CommentInput {
        _id: String
        author: String
        text: String
    }
    type Comment {
        _id: String
        author: String
        text: String
    }
    type Mutation {
        createOrUpdateComment(input: CommentInput): Comment
    }
`);

// rootValue
const root = {
    createOrUpdateComment: ({input}: { input: IComment }) => {
       return {
         _id: "id here",
         author: input.author,
         text: input.text
       }
    }
};

export default graphqlHTTP({
    graphiql: true,
    rootValue: root,
    schema
});

이것은 가져 와서 다음과 comments같이 익스프레스 서버의 최상위 레벨에서 사용됩니다 .

app.use("/comments", comments);

어떻게 일하고 : GraphiQL은 에서 팝업 않습니다 localhost:8080/comments내가 확신 사물의 익스프레스 측에 아무런 문제가 없다 해요, 그래서 브라우저에서. (TypeScript는 잘 컴파일됩니다.) "Hello world!"를 반환하는 다른 GraphQL api 엔드 포인트도 있습니다. Mocha를 사용하여 테스트하고 통과하는 서버의 최상위 수준에서 (초기 실패 후) 통과하므로 테스트 스위트가 잘 작동하는 것 같습니다. 추가 환경 변수가 없습니다. 여기에 보이는 그대로입니다.

404 잘못된 요청을 제공하는 통과하려는 테스트는 다음과 같습니다.

// imports (...working fine)

describe("graphQl comments test", () => {

    it("should add a comment", (done) => {

        const query = `mutation createOrUpdateComment($input: CommentInput) {
              _id
              author
              text
          }`;

        const variables = {
              input: {
                  author: "Brian",
                  text: "This is my favorite video of all time."
              }
          };

        request(app)
            .post("/comments")
            .send(JSON.stringify({ query, variables})) // (The problem could be here.)
            .expect(200)
            .end((err, res) => {
                if (err) { return done(err); }
                // tslint:disable-next-line: no-unused-expression
                expect(res.body.data.id).to.exist;
                expect(res.body.data.author).to.equal("Brian");
                expect(res.body.data.text).to.equal("This is my favorite video of all time.");
                done();
            });
    });
});

그것은 "나쁜 말한다 때문에 요청 "나는 처리하는 방식 query과를 variables시험에를 확실히 문제가 될 수 있습니다.

질문

내 문제는 테스트의 쿼리 및 변수입니까 아니면 내 문제 buildSchema입니까? ... 또는 둘 다입니까? 테스트를 통과하려면 어떻게 다르게 작성해야합니까?

최신 정보

내보내기에서 rootValue를 이렇게 주석 처리 한 후 GraphiQL에서 "쿼리 루트 유형을 제공해야합니다"라고 말 했으므로 차이가 없음을 알았습니다. (가) 것처럼입니다 rootValue하지가이 경우에도.

export default graphqlHTTP({
    graphiql: true,
    // rootValue: root,
    schema
});

나는이 추가되면 Query과를 getComment()언급 뭔가 당 이 Github의 문제 에서 오류 메시지 GraphiQL은 사라입니다. 불행히도 테스트는 여전히 400 개의 잘못된 요청을 제공 하므로 문제가 관련이없는 것처럼 보입니다.

업데이트 2

GraphiQL로 엔드 포인트를 테스트했으며 다음과 같이 게시 할 때 예상 / 원하는대로 작동했습니다.

mutation {
  createOrUpdateComment(input: {_id: "4", author: "Some Author", text: "some unique text"}) {
    _id
    author
    text
  }
}

나는 내 테스트 쿼리를 유사하게 만들기 위해 노력하고 있지만 아날로그가 아닙니다. 이것은 문제가 테스트 자체에 있음을 분명히하고 신체의 응답을 기록 할 때 다음을 얻습니다.

여기에 이미지 설명 입력

그래서 내 테스트의 쿼리 문자열에 문제가 있습니다.

해결되었습니다.

아래 내 대답을 참조하십시오.

가브리엘 쿤켈

테스트에서 나의 주요 문제점은

  • 데이터를 문자열 화하는 JSON이었습니다. 그것은 fetch를 사용 하는 문서의 에 있었지만 supertest는 데이터를 JSON 문자열로 자동으로 변환합니다.
  • 변수가 추가되지 않은 하나의 문자열로만 쿼리를 조정했습니다. 나는 이것을 더 빨리 가지고 놀면서 변수와 함께 보낼 수 있는지 확인하고 싶지만 일을 단순화하고 싶었습니다.
  • Daniel Rearden의 조언에 따라 시체를 로그 아웃했습니다. 이것은 제가 테스트에서 할 생각이 없었던 값진 디버깅 조언입니다. 왜냐하면 저는 "글쎄, 오류가 있습니다."라고 가정했기 때문입니다. 이런. 아니. 항상 응답이 있습니다. 이것은 내 반환 값을 정확하게 설정하는 데 도움이되었습니다.

이것은 내가 끝낸 테스트 파일입니다.

import { expect } from "chai";
import request = require("supertest");
import app from "../src";

describe("graphQl comments test", () => {

    it("should add a comment", (done) => {

        const query = `mutation {
            createOrUpdateComment(input: {_id: "4", author: "Brian", text: "This is my favorite video of all time."}) {
              _id
              author
              text
            }
          }`;

        request(app)
            .post("/comments")
            .send({query})
            .expect(200)
            .end((err, res) => {
                if (err) { return done(err); }
                // tslint:disable-next-line: no-unused-expression
                expect(res.body.data.createOrUpdateComment._id).to.exist;
                expect(res.body.data.createOrUpdateComment.author).to.equal("Brian");
                expect(res.body.data.createOrUpdateComment.text).to.equal("This is my favorite video of all time.");
                done();
            });
    });
});

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

URL의 매개 변수에 대해 400 개의 잘못된 요청 오류가 발생합니다.

분류에서Dev

400 Spring 컨트롤러에 대한 Ajax 호출의 잘못된 요청 오류

분류에서Dev

대부분의 API가 프런트 엔드에서 호출되는 동안 400 개의 잘못된 요청 오류를 반환합니다.

분류에서Dev

HTTP 멀티 파트 요청에 대한 400 잘못된 요청 오류

분류에서Dev

모든 요청에 대한 Azure 400 잘못된 요청

분류에서Dev

HTTP 오류 400 : Python에서 Facebook의 게시물 좋아요를 가져 오는 데 대한 잘못된 요청

분류에서Dev

누락 된 필수 매개 변수에 대해 잘못된 요청 (400)을 리턴합니다.

분류에서Dev

이미지 소스 바인딩에 대한 VueJS 400 잘못된 요청

분류에서Dev

유효한 URL에 대한 WebClient 잘못된 요청 400

분류에서Dev

Spotify API에서 액세스 토큰에 대한 코드를 교환 할 때 왜 계속 400 잘못된 요청 오류가 발생합니까?

분류에서Dev

Scrapy가 브라우저 요청과 동일한 요청에서 400 잘못된 요청을 받고 있습니다.

분류에서Dev

request-pormise-포트가있는 서버에 대한 잘못된 게시 요청

분류에서Dev

Rails-React에 대한 React Ajax 400 잘못된 요청

분류에서Dev

$ http 게시 방법에 대한 400 잘못된 요청

분류에서Dev

Yii의 데이터베이스에 대한 잘못된 요청?

분류에서Dev

laravel의 "화이트리스트"IP에 문제가 있습니다. 미들웨어 경로에 문제가 있거나 솔루션 문제에 대한 잘못된 방법이 있습니까?

분류에서Dev

클래스의 할당 끝점에서 잘못된 요청을 해결하는 방법은 무엇입니까?

분류에서Dev

Firebase 앱 배포에서 앱 정보를 가져 오지 못했습니다. [400] 요청에 다중 Firebase Android 프로젝트 설정에 대한 잘못된 인수가 포함되어 있습니다.

분류에서Dev

Jersey에 대한 JSON 요청으로 "400 잘못된 요청"발생

분류에서Dev

DAO 계층의 Junit 테스트가 postgresql exists () 쿼리에 대해 잘못된 결과를 반환합니다.

분류에서Dev

GET / groups / {id} / notes / sections / {id} / pages가 페이지에 잘못된 콘텐츠 URL을 제공합니다. 그 요청에 대한 get은 400을 제공합니다

분류에서Dev

C ++ Rest SDK 긴 데이터 유형을 요청 본문에 전달하면 400 개의 잘못된 요청이 발생합니다.

분류에서Dev

스프링 레스트 빈 요청 본문 처리 (400 잘못된 요청)

분류에서Dev

Undertow Core HTTPS 서버가 400 개의 잘못된 요청을 제공합니다.

분류에서Dev

컨트롤러에 대한 요청에서 유니 코드가 아닌 문자의 잘못된 표현을 수신합니다 ( "Сыр"대신 "о").

분류에서Dev

큰 테이블에 대한 제한된 쿼리의 값을 제한하는 점이 있습니까?

분류에서Dev

Android URISyntaxException 인덱스 53의 쿼리에 잘못된 문자가 있습니다.

분류에서Dev

Laravel 6 여권이 잘못된 자격 증명에 대해 400 잘못된 요청을 반환합니다.

분류에서Dev

Spring Boot의 쿼리 매개 변수에 잘못된 대괄호 문자가 있습니다.

Related 관련 기사

  1. 1

    URL의 매개 변수에 대해 400 개의 잘못된 요청 오류가 발생합니다.

  2. 2

    400 Spring 컨트롤러에 대한 Ajax 호출의 잘못된 요청 오류

  3. 3

    대부분의 API가 프런트 엔드에서 호출되는 동안 400 개의 잘못된 요청 오류를 반환합니다.

  4. 4

    HTTP 멀티 파트 요청에 대한 400 잘못된 요청 오류

  5. 5

    모든 요청에 대한 Azure 400 잘못된 요청

  6. 6

    HTTP 오류 400 : Python에서 Facebook의 게시물 좋아요를 가져 오는 데 대한 잘못된 요청

  7. 7

    누락 된 필수 매개 변수에 대해 잘못된 요청 (400)을 리턴합니다.

  8. 8

    이미지 소스 바인딩에 대한 VueJS 400 잘못된 요청

  9. 9

    유효한 URL에 대한 WebClient 잘못된 요청 400

  10. 10

    Spotify API에서 액세스 토큰에 대한 코드를 교환 할 때 왜 계속 400 잘못된 요청 오류가 발생합니까?

  11. 11

    Scrapy가 브라우저 요청과 동일한 요청에서 400 잘못된 요청을 받고 있습니다.

  12. 12

    request-pormise-포트가있는 서버에 대한 잘못된 게시 요청

  13. 13

    Rails-React에 대한 React Ajax 400 잘못된 요청

  14. 14

    $ http 게시 방법에 대한 400 잘못된 요청

  15. 15

    Yii의 데이터베이스에 대한 잘못된 요청?

  16. 16

    laravel의 "화이트리스트"IP에 문제가 있습니다. 미들웨어 경로에 문제가 있거나 솔루션 문제에 대한 잘못된 방법이 있습니까?

  17. 17

    클래스의 할당 끝점에서 잘못된 요청을 해결하는 방법은 무엇입니까?

  18. 18

    Firebase 앱 배포에서 앱 정보를 가져 오지 못했습니다. [400] 요청에 다중 Firebase Android 프로젝트 설정에 대한 잘못된 인수가 포함되어 있습니다.

  19. 19

    Jersey에 대한 JSON 요청으로 "400 잘못된 요청"발생

  20. 20

    DAO 계층의 Junit 테스트가 postgresql exists () 쿼리에 대해 잘못된 결과를 반환합니다.

  21. 21

    GET / groups / {id} / notes / sections / {id} / pages가 페이지에 잘못된 콘텐츠 URL을 제공합니다. 그 요청에 대한 get은 400을 제공합니다

  22. 22

    C ++ Rest SDK 긴 데이터 유형을 요청 본문에 전달하면 400 개의 잘못된 요청이 발생합니다.

  23. 23

    스프링 레스트 빈 요청 본문 처리 (400 잘못된 요청)

  24. 24

    Undertow Core HTTPS 서버가 400 개의 잘못된 요청을 제공합니다.

  25. 25

    컨트롤러에 대한 요청에서 유니 코드가 아닌 문자의 잘못된 표현을 수신합니다 ( "Сыр"대신 "о").

  26. 26

    큰 테이블에 대한 제한된 쿼리의 값을 제한하는 점이 있습니까?

  27. 27

    Android URISyntaxException 인덱스 53의 쿼리에 잘못된 문자가 있습니다.

  28. 28

    Laravel 6 여권이 잘못된 자격 증명에 대해 400 잘못된 요청을 반환합니다.

  29. 29

    Spring Boot의 쿼리 매개 변수에 잘못된 대괄호 문자가 있습니다.

뜨겁다태그

보관