我的源代码是:
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)我将如何实际测试单元测试?
发布于 2016-11-05 20:46:42
张贴我的评论作为一个扩展的答复。
首先,您需要将您的数据处理函数提取到另一个模块中,例如data-handler.js (这是您的代码的一个示例,它可能会被增强以看起来更好,但它只是给出了一个想法)。
module.exports = {
   handler: (rowData, topCsvStream, otherCsvStream) => {
      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;
      }
   },
   end: (topCsvStream, otherCsvStream) => {
      topCsvStream.end();
      otherCsvStream.end();
      writeDailyList(dailyTops, headerRow);
   }
}在主文件中,您将引用模块:
const handler = require("./data-handler");
csv
 .fromPath('posts.csv')
 .on("data", (data) => handler.handler(data, topCsvStream, otherCsvStream).on("end", () => handler.end(topCsvStream, otherCsvStream));现在,您的处理程序代码不绑定到流,您可以轻松地在没有它们的情况下测试它。
https://stackoverflow.com/questions/40438941
复制相似问题