gpt4 book ai didi

node.js - 使用 mocha 测试二进制文件上传

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:42 25 4
gpt4 key购买 nike

我目前正在使用 Nodejs 和 Restify 开发一个小型 API,它需要通过接收二进制字符串来完成文件上传。

我不知道该怎么做,就是用 Mocha 测试它,所以我一直在做一些搜索,并在堆栈溢出Unit test file upload with mocha上找到了这个,这是一个很好的开始,但它不会工作,因为它发送一个多部分表单,而我要求客户端在 api 上发送的是作为流的文件。

这是我的 Controller :

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));
});
};

因此,鉴于此 Controller 接收流(二进制文件),并将流放在后端,我将如何使用 mocha 测试此 Controller ?

最佳答案

您可以使用 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);
});

关于node.js - 使用 mocha 测试二进制文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com