如何使用 GRAPHQL 测试 e2e Nestjs API

bin*_*n k 6 testing e2e-testing graphql nestjs graphql-mutation

当我通过 graphql-playground 创建我的所有者时,它工作正常,\n但我的测试失败并回复我“body.data.createOwner 未定义”,没有数据。

\n
// owner.e2e.spec.ts\ndescribe('Owner test (e2e)', () => {\n    let app: INestApplication;\n\n    beforeAll(async () => {\n        const moduleRef = await Test.createTestingModule({\n            imports: [\n                GraphQLModule.forRoot({\n                    autoSchemaFile: join(process.cwd(), 'src/schema.gql'),\n                }),\n                OwnerModule,\n                DatabaseModule\n            ]\n        }).compile();\n        app = moduleRef.createNestApplication();\n        await app.init();\n    });\n\n    afterAll(async () => {\n        await app.close();\n    })\n\n    const createOwnerQuery = `\n           mutation createOwner($OwnerInput: OwnerInput!) {\n            createOwner(ownerInput: $OwnerInput) {\n              _id\n              name\n              firstname\n              email\n              password\n              firstsub\n              expsub\n              createdAt\n              updatedAt\n            }\n          }\n    `;\n   \n    let id: string = '';\n\n    it('createOwner', () => {\n        return request(app.getHttpServer())\n            .post('/graphql')\n            .send({\n                operationName: 'createOwner',\n                variables: {\n                   OwnerInput: {\n                        name: 'adar',\n                        firstname: 'adar',\n                        email: 'adar@test.com',\n                        password: 'testing',\n                        firstsub: '2020-08-14',\n                        expsub: '2020-07-13'\n                    }\n                },\n                query: createOwnerQuery,\n            })\n            .expect(({ body }) => {\n                const data = body.data.createOwner <-- test fail at this line\n                id = data._id\n                expect(data.name).toBe(owner.name)\n                expect(data.email).toBe(owner.email)\n                expect(data.firstsub).toBe(owner.firstsub)\n            })\n            .expect(200)\n    })\n
Run Code Online (Sandbox Code Playgroud)\n
// Output terminal\n\n FAIL  test/owner.e2e-spec.ts (9.567 s)\n  Owner test (e2e)\n    \xe2\x9c\x95 createOwner (79 ms)\n\n  \xe2\x97\x8f Owner test (e2e) \xe2\x80\xba createOwner\n\n    TypeError: Cannot read property 'createOwner' of undefined\n\n       98 |             })\n       99 |             .expect(({ body }) => {\n    > 100 |                 const data = body.data.createOwner\n          |                                        ^\n      101 |                 id = data._id\n      102 |                 expect(data.name).toBe(owner.name)\n      103 |                 expect(data.email).toBe(owner.email)\n\n      at owner.e2e-spec.ts:100:40\n      at Test._assertFunction (../node_modules/supertest/lib/test.js:283:11)\n      at Test.assert (../node_modules/supertest/lib/test.js:173:18)\n      at Server.localAssert (../node_modules/supertest/lib/test.js:131:12)\n\nTest Suites: 1 failed, 1 total\nTests:       1 failed, 1 total\nSnapshots:   0 total\nTime:        9.645 s, estimated 10 s\nRan all test suites.\n
Run Code Online (Sandbox Code Playgroud)\n

bin*_*n k 3

我的问题来自 CLI 插件,它会自动生成可为空的 Graphql 字段,而无需将 @Field 装饰器放入我的 ObjectType 中。

Nest的创建者针对这个问题给出了一个技巧。

--> https://github.com/nestjs/graphql/issues/810

但这对我不起作用,所以我只是将“@Field”装饰器添加到模型 @ObjectType() 中的所有属性。