gpt4 book ai didi

node.js - 在 NodeJS 中使用流进行 TDD/测试

转载 作者:IT老高 更新时间:2023-10-28 21:57:09 24 4
gpt4 key购买 nike

我一直在尝试寻找一种合理的方法来测试使用流的代码。有没有人找到一种合理的方法/框架来帮助测试在 nodejs 中使用流的代码?

例如:

var fs = require('fs'),
request = require('request');

module.exports = function (url, path, callback) {
request(url)
.pipe(fs.createWriteStream(path))
.on('finish', function () {
callback();
});
};

我目前测试这类代码的方法要么是使用流来简化代码,以至于我可以将其抽象为未经测试的代码块,要么编写如下代码:

var rewire = require('rewire'),
download = rewire('../lib/download'),
stream = require('stream'),
util = require('util');

describe('download', function () {
it('should download a url', function (done) {
var fakeRequest, fakeFs, FakeStream;

FakeStream = function () {
stream.Writable.call(this);
};

util.inherits(FakeStream, stream.Writable);

FakeStream.prototype._write = function (data, encoding, cb) {
expect(data.toString()).toEqual("hello world")
cb();
};

fakeRequest = function (url) {
var output = new stream.Readable();

output.push("hello world");
output.push(null);

expect(url).toEqual('http://hello');

return output;
};

fakeFs = {
createWriteStream: function (path) {
expect(path).toEqual('hello.txt');
return new FakeStream();
}
};

download.__set__('fs', fakeFs);
download.__set__('request', fakeRequest);

download('http://hello', 'hello.txt', function () {
done();
});

});
});

有没有人想出更优雅的测试流的方法?

最佳答案

为此目的进行了流测试。它不仅使流测试更干净,还允许测试 V1 和 V2 流 https://www.npmjs.com/package/streamtest

关于node.js - 在 NodeJS 中使用流进行 TDD/测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141226/

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