0

this is my test file for upload and i explain it step by step:
I wrote a test to upload the file. the uploader method written with busboy module and it working true but i have problem in test. when result of uploader is error, this error never returned in .catch and go in .then.
more explain in code:

const http = require('http');
// const request = require('request');
const rp = require('request-promise');
const fs = require('fs');
const assert = require('chai').assert;
const port = process.env.PORT || 80;
const Q = require('q');
let server;



const options = {
  method: 'POST',
  uri: 'http://127.0.0.1/upload',
  formData: {
    name: 'test',
    file: {
      value: fs.createReadStream('./test/test.jpg'),
      options: {
        filename: 'test.jpg',
        contentType: 'image/jpg'
      }
    }
  },
  headers: {
    'Connection': 'Keep-Alive',
    'content-type': 'multipart/form-data'  // Is set automatically
  },
  json: true,
};


function startServer(port, cb) {
  server = http.createServer(function (req, res) {
    if (req.method === 'POST') {
      if (req.url === '/upload') {
        serveRequest(req, res);
      }
    }
  });
  server.listen(port, () => {
    cb(function stopServer(done) {
      setTimeout(function () {
        server.close();
        done();
      }, 20);
    });
    console.log(`listening on port ${port} ...`);
  });
}




function serveRequest(request, response) {
  if (request.headers.hasOwnProperty('content-type')
    && request.headers['content-type'].split(';')[0] === 'multipart/form-data') {
    serveUpload(request, response);
  }
}

function serveUpload(request, response) {
  uploader.upload(request, function (error, res) {
    if (error) {

      response.end();
    }
    else {
      response.write(JSON.stringify(res));
      response.end();
    }
  });
}

// -----------------------
describe('upload', function () {
  let stopServer = null;
  before('start server', function (done) {
    startServer(port, function (stop) {
      stopServer = stop;
      done();
    });
  });
  it('upload a file - options is true', function (done) {
    rp(options)
      .then(function (r) {
        console.log(r);
      })
      .catch(function (error) {
        console.log(error);
      });

  });

  after('stop server', function (done) {
    stopServer(done);
  });
});

I make a request to the uploader and the result of my request is returned in the serveUpload() method. The result of serveUpload() is error and error is object like this :

error = 
meta: {
   code: '',
   sourceType: 'module',
   sourceName: '',
   version: '2.0.4'
 },
 data: {
   message: {
     en: 'uploaded data size is out of limit'
   }
 }
}

this error must returned .catch(e) in the rp(options), but in fact it must go to .then(r) in rp(options)
log r in .then is undefined.

rp(options)
     .then(function (r) {
       console.log(r); // error always come here But in fact it must go to catch and r is undefined
     })
     .catch(function (error) {
       console.log(error);  
     });

I don't understand why this is happening, I would be very grateful if anyone could help me.

mrbelane
  • 175
  • 1
  • 1
  • 7

0 Answers0