TDD/ Tests mit streams in NodeJS

Ich habe versucht zu finden, eine vernünftige Weg, um test-code, der verwendet streams. Hat jemand gefunden, einen vernünftigen Weg/Rahmen für die Unterstützung der Prüf-code, der verwendet streams in nodejs?

Beispiel:

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

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

Meine aktuelle Art und Weise der Prüfung dieser Art von code, der entweder die Vereinfachung der code mit streams so viel, dass ich Abstrakt und es sich um ein nicht getesteter code oder durch das schreiben etwas wie dieses:

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

  });
});

Hat jemand weitere elegante Art des streams testen?

Schreibe einen Kommentar