【问题标题】:Access to Apollo server for NestJS GraphQL test访问 Apollo 服务器以进行 NestJS GraphQL 测试
【发布时间】:2019-09-24 03:27:30
【问题描述】:

测试 Apollo GraphQL 服务器的标准方法是使用Apollo test clientcreateTestClient 方法需要 server 参数。 在 NestJS/TypeGraphQL 应用程序中,从 (Jest) 测试内部访问由 GraphQLModule 创建的 Apollo 服务器的适当方法是什么?

【问题讨论】:

    标签: graphql apollo nestjs


    【解决方案1】:
        const moduleFixture = await Test.createTestingModule({
          imports: [ApplicationModule],
        }).compile()
        const app = await moduleFixture.createNestApplication(new ExpressAdapter(express)).init()
        const module: GraphQLModule = moduleFixture.get<GraphQLModule>(GraphQLModule)
        const apolloClient = createTestClient((module as any).apolloServer)
    

    这就是我的工作

    【讨论】:

    • 在我的项目中,这会导致 TypeError: Cannot read property 'executeOperation' of undefined,因为 module.apolloServer 未定义。 NestFactory.createApplicationContext(AppModule) 也是如此。使用"@nestjs/graphql": "^6.5.1"
    【解决方案2】:

    此 PR https://github.com/nestjs/graphql/pull/1104 使您能够使用 apollo-server-testing 编写测试。

    【讨论】:

      【解决方案3】:

      这段代码对我有用。感谢 JustMe

      import { Test, TestingModule } from '@nestjs/testing';
      import { INestApplication } from '@nestjs/common';
      import { createTestClient, TestQuery } from 'apollo-server-integration-testing';
      
      import { AppModule } from './../src/app.module';
      import { GraphQLModule } from '@nestjs/graphql';
      
      describe('AppController (e2e)', () => {
        let app: INestApplication;
        // let mutateTest: TestQuery;
        let correctQueryTest: TestQuery;
        let wrongQueryTest: TestQuery;
      
        beforeEach(async () => {
          const moduleFixture: TestingModule = await Test.createTestingModule({
            imports: [AppModule],
          }).compile();
      
          app = moduleFixture.createNestApplication();
          await app.init();
          const module: GraphQLModule =
            moduleFixture.get<GraphQLModule>(GraphQLModule);
          const { query: correctQuery } = createTestClient({
            apolloServer: (module as any).apolloServer,
            extendMockRequest: {
              headers: {
                token:
                  'iIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2MWFiNmY0MjQ3YjEyYWNiNzQyYmQwYmYiLCJyb2xlIjoibWFuYWdlciIsImVtYWlsIjoibGVuYUBtYWlsLmNvbSIsInBhc3N3b3JkIjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiLCJ1c2VybmFtZSI6ImxlbmEgZG9lIiwiY3JlYXRlZEF0IjoiMjAyMS0xMi0wNFQxMzozODoxMC4xMzZaIiwidXBkYXRlZEF0IjoiMjAyMS0xMi0wNFQxMzozODoxMC4xMzZaIiwiX192IjowLCJpYXQiOjE2Mzg2NTE4MjMsImV4cCI6MTYzODY1MTg4M30.d6SCh4x6Wwpj16UWf4ca-PbFCo1FQm_bLelp8kscG8U',
              },
            },
          });
          const { query: wrongQuery } = createTestClient({
            apolloServer: (module as any).apolloServer,
          });
          // mutateTest = mutate;
          correctQueryTest = correctQuery;
          wrongQueryTest = wrongQuery;
        });
      
        it('/ Correct', async () => {
          const result = await correctQueryTest(`
              query FILTER_JOBS{
                filterJobs(status: DONE) {
                  title,
                  status,
                  description,
                  lat,
                  long,
                  employees,
                  images,
                  assignedBy {
                    username,
                    email
                  }
                }
              }
          `);
          console.log(result);
        });
        it('/ Wrong', async () => {
          const result = await wrongQueryTest(`
              query FILTER_JOBS{
                filterJobs(status: DONE) {
                  title,
                  status,
                  description,
                  lat,
                  long,
                  employees,
                  images,
                  assignedBy {
                    username,
                    email
                  }
                }
              }
          `);
          console.log(result);
        });
      });
      

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2021-10-04
        • 2020-10-05
        • 2017-11-29
        • 2019-11-15
        • 2021-03-09
        • 2020-10-23
        • 2023-01-30
        • 2019-09-29
        相关资源
        最近更新 更多