问题描述
我正在构建 Next.js 应用程序。我有一个 server side route 用于使用 Magic 登录。
import type { NextApiHandler } from 'next';
import { setTokenCookie } from 'utils/cookies';
import magic from 'utils/magic';
import { encryptSession } from 'utils/sessions';
import type { ApiErrorResponse } from 'utils/types';
export type LoginHandlerSuccessResponse = {
done: true;
};
type LoginHandlerResponse = ApiErrorResponse | LoginHandlerSuccessResponse;
const loginHandler: NextApiHandler<LoginHandlerResponse> = async (
request,response,) => {
const authHeaders = request.headers.authorization;
if (authHeaders) {
const didToken = magic.utils.parseAuthorizationHeader(authHeaders);
const Metadata = await magic.users.getMetadataByToken(didToken);
const session = { ...Metadata };
const token = await encryptSession(session);
setTokenCookie(response)(token);
return response.status(200).json({ done: true });
}
return response.status(400).json({ message: 'No token found in request.' });
};
export default loginHandler;
在我的 Cypress 测试中,我试图像这样存根 magic.users.getMetadataByToken
方法:
describe.only('login and logout flow',() => {
beforeEach(() => {
// cy.stub(magic.users,'getMetadataByToken').resolves({
// email: 'test+success@magic.link',// issuer: 'did:ethr:0x1e9FF803fFA22209A10A087cc8361d4aa3528c45',// publicAddress: '0x1e9FF803fFA22209A10A087cc8361d4aa3528c45',// });
// magic.users.getMetadataByToken = cy.stub();
});
// ...
但是由于某种原因,该函数没有被模拟。我认为这与代码在服务器端运行的事实有关。有没有办法模拟 API 路由中的特定行,而不必intercept
整个路由?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)