如何使用Supertest对文件上传进行单元测试 - 并发送令牌?

时间:2016-07-15 17:42:35

标签: unit-testing mocha endpoint chai supertest

如何在发送令牌的情况下测试文件上传?我回来了" 0"而不是确认上传。

这是一项失败的测试:

-Xfatal-warnings

这是一项工作测试:

var chai = require('chai');
var expect = chai.expect;
var config = require("../config");  // contains call to supertest and token info

  describe('Upload Endpoint', function (){

    it('Attach photos - should return 200 response & accepted text', function (done){
        this.timeout(15000);
        setTimeout(done, 15000);
        config.api.post('/customer/upload')
              .set('Accept', 'application.json')
              .send({"token": config.token})
              .field('vehicle_vin', "randomVIN")
              .attach('file', '/Users/moi/Desktop/unit_test_extravaganza/hardwork.jpg')

              .end(function(err, res) {
                   expect(res.body.ok).to.equal(true);
                   expect(res.body.result[0].web_link).to.exist;
               done();
           });
    });
});

任何建议都表示赞赏!

3 个答案:

答案 0 :(得分:4)

使用超级测试4.0.2,我能够set令牌和attach文件:

import * as request from 'supertest';

return request(server)
  .post('/route')
  .set('Authorization', 'bearer ' + token)
  .attach('name', 'file/path/name.txt');

更好的是,根据docs,您可以创建一个Buffer对象来附加:

const buffer = Buffer.from('some data');

return request(server)
  .post('/route')
  .set('Authorization', 'bearer ' + token)
  .attach('name', buffer, 'custom_file_name.txt');

答案 1 :(得分:1)

附加文件时似乎覆盖了令牌字段。我的解决方法是将令牌添加到URL查询参数:

@foreach($subcategory as $subcategories)
<tr>
    <td><a href="#"> Edit </a></td>
    <td> {{ $subcategories->subcategory_name }} </td>
    <td> {{ $subcategories->category_id}} </td>
</tr>
@endforeach

您的身份验证中间件必须设置为从URL查询参数中提取JWT。 Passport-JWT在我的服务器上执行此提取。

答案 2 :(得分:0)

官方文件说明

  

使用.field()或.attach()时,不能使用.send(),并且不得设置Content-Type(将为您设置正确的类型)。

所以更换 .send({"token": config.token}) .field("token", config.token)