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