Neon
Neon9mo ago

Mock form data middleware (

Hello everyone, I'm using experimental_parseMultipartFormData on some of my procedures and i would like to know if some of you have found a nice way to mock the formData return from the middleware. I think this can be achieved either by mocking the middleware function with a mocked FormData resolved value (but i dont think thats possible) or by transform formData into a request body that could be correctly parsed by the middleware which use '@web3-storage/multipart-parser'. Here is my middleware code which is taken from the trpc example (https://github.com/trpc/trpc/blob/66d7db60e59b7c758709175a53765c9db0563dc0/examples/.experimental/next-formdata/src/server/routers/room.ts#L10C1-L23C1):
export const withFormdata = t.middleware(async (opts) => {
if (!opts.ctx.req || !opts.ctx.res) {
throw new Error("You are missing `req` or `res` in your call. 1");
}
if (!experimental_isMultipartFormDataRequest(opts.ctx.req)) {
return opts.next();
}

const formData = await experimental_parseMultipartFormData(
opts.ctx.req,
experimental_createMemoryUploadHandler(),
);

return opts.next({
getRawInput: async () => formData,
});
});
export const withFormdata = t.middleware(async (opts) => {
if (!opts.ctx.req || !opts.ctx.res) {
throw new Error("You are missing `req` or `res` in your call. 1");
}
if (!experimental_isMultipartFormDataRequest(opts.ctx.req)) {
return opts.next();
}

const formData = await experimental_parseMultipartFormData(
opts.ctx.req,
experimental_createMemoryUploadHandler(),
);

return opts.next({
getRawInput: async () => formData,
});
});
If someone have managed to do it, it would really help me if you explain how did you do it. Thanks you 🙂
GitHub
trpc/examples/.experimental/next-formdata/src/server/routers/room.t...
🧙‍♀️ Move Fast and Break Nothing. End-to-end typesafe APIs made easy. - trpc/trpc
4 Replies
<DxD/>
<DxD/>9mo ago
so u want to test your trpc with unit testing ? @Neon
Neon
Neon9mo ago
yep exactly
<DxD/>
<DxD/>9mo ago
Find a way to do it ? @Neon
Neon
Neon9mo ago
Hello @DxD , no i stoped searching for the moment, i will probably try to find a way later, its not very critical for now.