2

私は現在、バイナリ文字列を受け取ることにより、ファイルのアップロードが必要な nodejs と restify を使用した小さな API に取り組んでいます。

方法がわからないのは、モカでテストすることです。そのため、検索を行っていて、スタック オーバーフローでこれを見つけました。モカを使用したユニット テスト ファイルのアップロードです。これは良いスタートですが、マルチパート フォームを送信するため機能しません。クライアントがAPIで送信する必要があるのは、ストリームとしてのファイルです。

ここに私のコントローラーがあります:

exports.uploadVideo = function(req, res, next) {
    var video = "public/video/" + req.params.videoId + ".mp4",
        util  = require('util'),
        exec = require('child_process').exec;

    var newFile = fs.createWriteStream("./uploads/" + video);

    req.pipe(newFile);

    req.on('end', function () {
        var cmd = 'qtfaststart ' + './uploads/' + video;
        var qtfaststart = exec(cmd, function(error, stdout, stderr){
            if (error === "atom not found, is this a valid MOV/MP4 file?\n" || error !== null) {
                return next(new restify.ConflictError("Error: " + stdout));
            } else {
                fs.chmodSync('./uploads/' + video, '644');
                Video.findOne( { _id: req.params.videoId }, function(err, video) {
                    if (err) return next(new restify.ConflictError(err));
                    if (!video) {
                        newVideo = new Video({
                            _id: req.params.videoId,
                            file: video});
                        newVideo.save()

                    } else {
                        video.file = video;
                        video.increment();
                        video.save();
                    }
                });
            }
        });
    });

    req.on('error', function(err){
        return next(new restify.NetworkConnectTimeoutError(err));
    });
};

ストリーム (バイナリ ファイル) を受信し、ストリームをバックエンドにまとめるこのコントローラーが与えられた場合、このコントローラーを mocha でテストするにはどうすればよいでしょうか?

4

2 に答える 2

1

そのために次のように使用できますhttp

it('should be possible to upload a file', function(done) {
  var http        = require('http');
  var options     = require('url').parse(YOUR_URL);
  options.method  = 'POST';

  var req = http.request(options, function(response) {
    // TODO: check for errors, correct response, etc...
    done(...);
  });

  require('fs').createReadStream(YOUR_TEST_FILE).pipe(req);
});
于 2013-10-08T18:18:41.263 に答える
0

mocha 内からrequestモジュールを使用したい。マルチパートフォームをサポートしています。

于 2013-10-08T17:46:56.270 に答える