如何使用chai.js声明数组交集?

时间:2015-12-22 20:27:28

标签: javascript testing mocha chai

我不喜欢我的代码,是否有正确的方法在chai中找到交集,使用与查找超集类似的方法:expect([1,2]).to.contain.members([2])

mocha.setup("bdd");

var intersection = function(arr1, arr2) {
  return arr1.filter(function(n) {
    return arr2.indexOf(n) != -1;
  });
};

describe("Test suite", function() {
    it("should find if arrays intersect", function() {
        chai.expect(intersection([1, 2], [2, 3])).not.to.be.empty;
    });
});

mocha.run();
<link href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.3.4/mocha.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.3.4/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.4.1/chai.min.js"></script>

<div id="mocha"></div>

3 个答案:

答案 0 :(得分:1)

柴能做到!

expect([1,2]).to.include.any.members([2,3]);

答案 1 :(得分:0)

要检查两个数组的交集,我建议您使用set操作库。嘿,我刚刚写了一个!它被称为亲和力,它是免费的。 (https://www.npmjs.com/package/affinity)。它是集合和关系运算符的库。它仍在开发中,但是设置操作员的工作非常好(有400个单元测试和计数)。

在这种情况下,您可以执行

var affinity = require('affinity');
var set1 = new affinity.Set({type : affinity.Integer, elements : [1, 2]});
var set2 = new affinity.Set({type : affinity.Integer, elements : [2, 3]});
chai.expect(set1.setIntersection(set2).elements()).not.to.be.empty;

// you also have setUnion, setProduct, ...

答案 2 :(得分:0)

您可以使用热门lodash库中的<p data-sly-test="{{wcmmode.edit}}">You are in edit mode</p> <p data-sly-test="{{wcmmode.design}}">You are in design mode</p> ,如下所示:

_.intersection

...

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>