如何通过摩卡testing两个文件是否相同

我已经编写了一个node.js脚本,用于扫描非常大的遗留代码库并应用一组更改。

这些更改可能相当复杂,因为这会影响某些存储机制和相关的大小定义。

我已经写了testing,所有的计算和报告是正确的,使用摩卡,柴和sinon。 “

现在我正在尝试编写一个testing,将更改应用到传统源的20个样本。 我可以使用正确的更改创build20个样本的版本,我只是希望我的testing将所应用的更改与预测的更改进行比较。

所以实质上,testing是文件A和文件B之间的差异,其结果应该是文件是相同的。 Google在数组,string和对象差异上显示了很多结果。 有没有人有解决scheme如何做到这一点的文件?

我应该注意到,我并不是试图重新发明轮子。 我已经用prettydiff了一些prettydiff ,其中包括:

 prettydiff({source: processedFile, diff: expectedFile, lang: 'text'}).should.equal("Number of differences: 0 differences from 0 lines of text."); 

我也试过:

 expect(prettydiff({source: processedFile, diff: expectedFile, lang: 'text'})).to.equal("Number of differences: 0 differences from 0 lines of text."); 

然而,我在这两种情况下得到一个错误,说明Uncaught TypeError: object is not a function

使用摩卡testing两个文件的差异的正确方法是什么?

也许这个模块? 或者类似的东西?

https://www.npmjs.com/package/diff

从他们的API文档: https : //www.npmjs.com/package/prettydiff

 var prettydiff = require("prettydiff"), args = { source: "asdf", diff : "asdd", lang : "text" }, output = prettydiff.api(args); 

这比我想象的要复杂得多。

在sctskw的帮助下,我们确定第一个问题是错误地使用了prettydiff api。 不幸的是,它并没有解决如何在node.js中区分两个文件。

我发现的库只接受string来执行diff。

prettydiff会在结果中添加大量html内容,这样您就不得不将输出redirect到一个文件并在浏览器中查看结果。 如果您希望以编程方式分析结果,则不太合适。

jsdiff在每一行上报告,每行有几个variables来确定它是新行还是删除行。

在这两种情况下,都必须先读取文件。 所以这两种方法的通用代码如下:

 var fs = require ('fs'); var source = ""; var target = ""; try { source = fs.readFileSync('a.txt', 'utf8'); } catch(e) { console.error("error reading a.txt: " + e.message); return; } try { target = fs.readFileSync('b.txt', 'utf8'); } catch(e) { console.error("error reading a.txt: " + e.message); return; } 

要testingprettydiff中的文件, 请执行以下操作:

 var prettydiff = require('prettydiff'); output = prettydiff.api({ source: source, mode: 'diff', diff: target, lang: 'text', }); console.log(output[0]); 

只要确保在运行时将输出redirect到文件,请在您select的浏览器中查看结果。

要testingjsdff中的文件, 请执行以下操作:

 var diff = require('diff'); var results = diff.diffLines(source, target); var identical = true; results.forEach(function(part) { if(part.added) { console.log("added: " + part.value); identical = false; } if(part.removed) { console.log("removed: " + part.value); identical = false; } }); console.log("Identical? " + identical); 

显然,代码并不是最有效率的,并且可以采用更聪明的方法来处理文件,而不是使用同步,但是这些例子清楚地说明了如何在node.js中区分文件。

如果您想以编程方式处理结果,并且是确定文件是否相同的唯一简单方法,则第二个方法非常有用。

你有没有尝试使用diffcli选项从命令行运行Pretty Diff

当我运行:

节点api / node-local.js源:“prettydiff.js”diff:“prettydiff.js”模式:“diff”diffcli:“true”

命令行报告:

Pretty Diff在1个文件中find1个文件中的差异。 执行时间为0.058秒。

这里有一些文档: http : //prettydiff.com/guide/diffcli.xhtml