0
私のソースコードは次のとおりです。node.jsのファイルストリームを使用してユニットのテストを行う方法を教えてください。
var _ = require('lodash');
var fs = require('fs');
var csv = require('fast-csv');
var topPostStream = fs.createWriteStream('top_posts.csv');
var topOtherStream = fs.createWriteStream('other_posts.csv');
var topCsvStream = csv.createWriteStream();
var otherCsvStream = csv.createWriteStream();
var dailyTops = {};
var headerRow = [];
topCsvStream.pipe(topPostStream);
otherCsvStream.pipe(topOtherStream);
console.log(process.argv);
csv
.fromPath('posts.csv')
.on('data', function(rowData) {
if(headerRow.length === 0) {
// Save header row in CSV's
headerRow = rowData;
topCsvStream.write(headerRow);
otherCsvStream.write(headerRow);
return;
}
if(rowData[2] === 'public' && rowData[5] > 10 && rowData[4] > 9000 && rowData[1].length < 40) {
// Save to the top_posts file
topCsvStream.write(rowData);
} else {
// Save to the other_posts file
otherCsvStream.write(rowData);
}
// Save to the daily tops
var postDate = new Date(rowData[6]);
postDate = new Date(postDate.getYear(), postDate.getMonth(), postDate.getDate());
if(!dailyTops[postDate] || parseInt(rowData[3]) > parseInt(dailyTops[postDate][3])) {
dailyTops[postDate] = rowData;
}
})
.on('end', finishWrite);
function finishWrite() {
topCsvStream.end();
otherCsvStream.end();
writeDailyList(dailyTops, headerRow);
}
function writeDailyList(dailyTops, headerRow) {
var daily = _.map(_.keys(dailyTops), function(key) {
return dailyTops[key];
});
var daily = [headerRow].concat(daily);
csv
.writeToPath('daily_top_posts.csv', daily, {headers: true})
}
私は限り近い100%のカバレッジを取得するためにユニットテストを記述する必要があります。私の問題は、(a)テストするのが単純すぎるように思えるし、(b)単体テストを実際に測定するにはどうすればいいのだろうか?
あなたができることは他のモジュールにコードを抽出し、ストリームをモックすることなくテストすることです –
おそらくもっと具体的になりますか? – Shamoon