Pau*_*ice 5 javascript testing matcher mocha.js chai
当两者都是对象数组时,断言预期结果是否与实际结果相匹配的最佳方法是什么?我的直接想法是使用Array原型过滤器并检查交集是否与预期相同,即:
describe('select',function(){
it("should return selected columns", function(done) {
var query = "select lunchTime, name";
var actual = ... results of the query, an array of anonymous objects ...
// expected results
var expected = [{"lunchTime": "12:00:00", "name": "John"},
{"lunchTime": "12:00:00", "name": "Dave"},
{"lunchTime": "13:00:00", "name": "Sally"},
{"lunchTime": "12:00:00", "name": "Ben"},
{"lunchTime": "12:00:00", "name": "Dana"},
{"lunchTime": "13:00:00", "name": "Mike"}];
var intersection = actual.filter(function(n) {
return expected.indexOf(n) != -1
});
expect(intersection).to.have.length(expected.length);
expect(actual).to.have.length(expected.length);
});
});
Run Code Online (Sandbox Code Playgroud)
这种方法有意义吗?有没有更好的方法断言查询结果符合预期?
Jas*_*ton 12
如您所述,对于集合,您可以使用:
expect(actual).to.have.members(expected);
Run Code Online (Sandbox Code Playgroud)
如果你想确保有中没有成员expected,在没有actual的话:
expect(actual).to.contain.members(expected);
Run Code Online (Sandbox Code Playgroud)
最后,如果你要比较对象,你可能想深入比较:
expect(actual).to.deep.have.same.members(expected);
Run Code Online (Sandbox Code Playgroud)
例如:
expect([{a:'a'}, {a:'b'}]).to.deep.have.same.members([{a:'a'}, {a:'b'}]);
Run Code Online (Sandbox Code Playgroud)
Chai有一个成员匹配器可以满足我的需求:
expect(actual).to.have.members(expected);
Run Code Online (Sandbox Code Playgroud)