微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Apollo Server (apollo-server) 上的 executeOperation 获取标头以进行集成测试

如何解决使用 Apollo Server (apollo-server) 上的 executeOperation 获取标头以进行集成测试

自从弃用 apollo-server-testing 后,我使用新的方式与 apollo-server(包含在 apollo-server 2.25.0 中)进行集成测试。从变更 signin 中,我在 OutgoingMessage 标头(在 'Set-Cookie' 中)中设置了刷新令牌。

简化的解析器

    @Mutation(() => RefreshTokenOutput)
    async refreshToken(@Ctx() { response,contextRefreshToken }: Context): Promise<RefreshTokenOutput> {
        if (contextRefreshToken) {
            const { accesstoken,refreshToken } = await this.authService.refreshToken(contextRefreshToken);
            response.setHeader(
                'Set-Cookie',cookie.serialize('refreshToken',refreshToken,{
                    httpOnly: true,maxAge: maxAge,secure: true,})
            );
            return { accesstoken: accesstoken };
        } else {
            throw new AuthenticationError();
        }
    }

测试用例

            // given:
            const { user,clearPassword } = await userLoader.createuser16c();
            const input = new UserSignininput();
            input.email = user.email;
            input.password = clearPassword;

            const MUTATE_signin = gql`
                mutation signin($userInput: UserSigninInput!) {
                    signin(input: $userInput) {
                        accesstoken
                    }
                }
            `;

            // when:
            const res = await server.executeOperation(
                { query: MUTATE_signin,variables: { userInput: input },operationName: 'signin' },buildContext(user)
            );

我正在尝试测试此令牌是否设置正确且格式正确。您知道如何使用 executeOperation 访问此标头吗?

解决方法

server.executeOperation 调用 processGraphQLRequest

并且 processGraphQLRequest 返回类型是 GraphQLResponse

export interface GraphQLResponse {
  data?: Record<string,any> | null;
  errors?: ReadonlyArray<GraphQLFormattedError>;
  extensions?: Record<string,any>;
  http?: Pick<Response,'headers'> & Partial<Pick<Mutable<Response>,'status'>>;
}

我不确定,但我认为 GraphQLResponse.http 中的标头

你可以在github repo中找到调用结构。

https://github.com/apollographql/apollo-server/blob/6b9c2a0f1932e6d8fb94a8662cc1da24980aec6f/packages/apollo-server-core/src/requestPipeline.ts#L126

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。