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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemacht streamtest für diesen Zweck. Es machen nicht nur streams tests Reiniger, aber auch erlaubt zu testen, V1-und V2-streams https://www.npmjs.com/package/streamtest
Hab ich auch schon mit memorystream, dann aber, dass meine Behauptungen in die
finish
Veranstaltung. So sieht es eher aus wie eine Reale Nutzung der stream getestet:Prüfen von Objekten werden wie folgt vorgenommen:
Fühle ich mich Ihr Schmerz.
Ich kenne keinen Rahmen, um zu helfen, die Tests mit streams, aber wenn nehmen Sie einen Blick hier,
wo entwickle ich einen stream-Bibliothek können Sie sehen, wie ich an dieses problem.
hier ist eine Idee von dem, was ich Tue.
Hinweis, dass mein Spion-Funktion umschließt die
_transform
- Methode, und rufen Sie meine spy und rufen Sie die original -_transform
Auch, Die
afterEach
Funktion ist die wiederverwertung der Spione, weil Sie am Ende Hunderte von Ihnen.Das problem wird hart, wenn Sie möchten, um zu testen, async-code. Dann verspricht Ihre beste Freundin. Der link, den ich oben gab, haben einige Beispiel, die.
Lesen Sie den Stream in den Speicher, und vergleichen Sie Sie mit den erwarteten Puffer.
Habe ich nicht verwendet, und es ist schon ziemlich alt, aber https://github.com/dominictarr/stream-spec helfen könnte.
Können Sie test-streams mit MemoryStream und sinon durch die Verwendung von Spionen. Hier ist, wie ich getestet habe einige meiner code.
Beste Weg, die ich gefunden habe, ist die Verwendung von Veranstaltungen
durch die übergabe erfolgt als callback, Mokka wartet, bis er aufgerufen wird, bevor Sie fortfahren.