Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用jest测试需要formData并使用multer的端点?_Node.js_Typescript_Jestjs_Multer_Form Data - Fatal编程技术网

Node.js 如何使用jest测试需要formData并使用multer的端点?

Node.js 如何使用jest测试需要formData并使用multer的端点?,node.js,typescript,jestjs,multer,form-data,Node.js,Typescript,Jestjs,Multer,Form Data,我有TypeScript设置,我正在测试一个端点,该端点将FormData作为输入,并使用multer处理多部分数据(pdf文件);看起来是这样的: app.post("/v1/sources/send-email", upload.single('file'), handledEmail ); import FormData from 'form-data'; ... const response = await request(app) .post("

我有TypeScript设置,我正在测试一个端点,该端点将
FormData
作为输入,并使用
multer
处理多部分数据(pdf文件);看起来是这样的:

app.post("/v1/sources/send-email", 
  upload.single('file'),
  handledEmail
);
import FormData from 'form-data';
    ...
    const response = await request(app)
      .post("/v1/sources/send-email")
      .send(formData)
      .set("X-AUTH-TOKEN", validToken);
我的jest测试有一个post请求,它在
send
方法中将伪
formData
传递给它,如下所示:

app.post("/v1/sources/send-email", 
  upload.single('file'),
  handledEmail
);
import FormData from 'form-data';
    ...
    const response = await request(app)
      .post("/v1/sources/send-email")
      .send(formData)
      .set("X-AUTH-TOKEN", validToken);
但是,当我尝试创建
formData
时,我得到一个错误:

let formData = new FormData();
formData.append('file', fs.createReadStream('path/to/file.pdf'));
错误是:

Argument of type 'ReadStream' is not assignable to parameter of type 'string | Blob'.
关于如何在这个formData变量上获取这个PDF文件,以便将其传递给测试的post请求,有什么想法吗

我的
tsconfig.json
如下所示:

{
  "compilerOptions": {
    "allowJs": false,
    "baseUrl": ".",
    "esModuleInterop": true,
    "lib": ["DOM", "ES2018"],
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "outDir": "dist",
    "paths": {
      "*": [
        "src/main/ts/*",
        "node_modules/*"
      ]
    },
    "sourceMap": true,
    "target": "es6"
  },
  "include": ["src/main/ts/**/*"]
}
我看到有人说创建一个模拟
FormData
的函数可能会起作用,但当我执行以下操作时,
global
赋值中出现了一个错误:

function FormDataMock() {
  this.append = jest.fn();
}
global.FormData = FormDataMock();

错误显示类型“Global”上不存在属性“FormData”。

这是您得到的typescript编译错误吗?你能分享你的TS配置和你正在使用的类型定义吗,如果有的话?@shkaper是的,这是一个TS设置,我想我的主要问题是如何模拟预期的
FormData
,这样我就可以在
send
命令中将它传递给
post
请求。这是你得到的typescript编译错误吗?你能分享你的TS配置和你正在使用的类型定义吗,如果有的话?@shkaper是的,这是一个TS设置,我想我的主要问题是如何模拟预期的
FormData
,这样我就可以在
send
命令中将它传递给
post
请求。