Mar*_*vic 8 typescript jestjs graphql apollo-server
Apollo Server 集成测试文档展示了如何使用createTestClient
以下命令测试简单查询:
const { query } = createTestClient(server);
const res = await query({ query: GET_LAUNCH, variables: { id: 1 } });
Run Code Online (Sandbox Code Playgroud)
在尝试测试需要授权令牌的查询时,我尝试将jwtToken
作为额外字段传递给传递给查询的对象,如下所示:
const res = await query({
query: MY_QUERY,
http: { headers: { authorization: `Bearer ${jwtToken}` } },
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用。尝试运行它时,我得到以下响应:
{
"http": {
"headers": {}
},
"errors": [{
"message": "must authenticate",
"locations": [{
"line": 2,
"column": 3
}],
"path": ["myQuery"],
"extensions": {
"code": "UNAUTHENTICATED"
}
}],
"data": {
"myQuery": null
}
}
Run Code Online (Sandbox Code Playgroud)
知道如何正确测试需要授权令牌的查询吗?
使用:
"devDependencies": {
"jest": "^23.6.0",
"apollo-server-testing": "^2.4.8"
}
Run Code Online (Sandbox Code Playgroud)
您可以为测试创建一个具有单独上下文的新服务器实例。像这样的东西(语法上可能不是 100% 正确,但你会明白的):
// Create a test user, no need to mess with JWT here, just create a plain object
// that resembles a user in your system.
const testUser = {
id: 'testId',
email: 'test@example.com',
};
// Use this for both test servers and real servers
export function getContext(models, viewer) {
return {
...models,
viewer,
};
}
// Create test server
const testServer = new ApolloServer({
typeDefs,
resolvers,
context: getContext({}, testUser),
});
const { query } = createTestClient(testServer);
// The actual server (you know better how this looks on your end, but just for
// the concept)
const realServer = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, res }) => {
const user = decodeUser(req.headers.authorization);
return getContext({}, user);
},
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3538 次 |
最近记录: |