我一直在试图找到一种合理的方式来测试使用流的代码。有没有人找到一个合理的方法/框架来帮助测试在nodejs中使用流的代码?TDD/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();
});
});
});
有没有人想出了测试流更优雅的方式?
谢谢你的lib。这正是我所需要的,并且效果很好。 –