如何设置Supertest附件的Content-Type

时间:2017-07-19 20:05:52

标签: node.js supertest

我在我的应用中遇到一个问题,如果文件是从Microsoft Windows发送的,那么与上传文件关联的Content-Type错误,提供application/octet-stream,如果从Mac发送,则可以,给text/csv。修复我的代码后不依赖于请求中的mime类型,我想在我的一个测试中模拟这个条件。

鉴于以下请求,其中包括JSON字符串表单字段和文件附件using supertest

  request(app)
    .post('/some/where')
    .field('someFormData', JSON.stringify(formData))
    .attach('someFile', 'someFile.csv')
    .expect(400)
    .end(done);

如何更改附件的内容类型?看看Edge的网络标签,我想看到以下请求的以下内容:

-----------------------------7e13121340602
Content-Disposition: form-data; name="someFormData"

{.............}
-----------------------------7e13121340602
Content-Disposition: form-data; name="someFile"; filename="someFile.csv"
Content-Type: application/octet-stream

ÿØÿà

(带点的JSON字符串已被省略)

(而不是显示text/csv,我想模拟错误的内容类型。)

3 个答案:

答案 0 :(得分:1)

使用附件 contentType 选项对我有用:

request(app)
    .post('/validateCertificate')
    .set('Content-type', 'multipart/form-data')
    .field('passphrase', '1234')
    .attach(
      'pfx',
      './src/build-request/test-certs/correct.pfx',
      { contentType: 'application/x-pkcs12' },
    )
    .expect(200))

答案 1 :(得分:0)

使用.set()设置所需的内容类型。或任何类型的标题。

答案 2 :(得分:0)

request(app)
    .post('/some/where')
    .field('someFormData', JSON.stringify(formData))
    .set('Content-Type',  'application/octet-stream')
    .attach('someFile', 'someFile.csv')
    .expect(400)
    .end(done);