Javascript 为什么不';t数组包含检查是否按chai.js中的预期工作?
我将Javascript 为什么不';t数组包含检查是否按chai.js中的预期工作?,javascript,bdd,assert,chai,expectations,Javascript,Bdd,Assert,Chai,Expectations,我将chai.js期望值与mocha js测试框架一起使用。我正在尝试测试数组中对象的包含,但chai在其文档中支持的包含行为似乎并不像我预期的那样起作用: 柴网的例子是: 这是意料之中的事。但是,以下操作失败: expect([{a: 1}]).to.be.an('array').and.include({a: 1}) 错误如下: (node:5639) ... AssertionError: expected [ { a: 1 } ] to include { a: 1 } 但这成功了:
chai.js
期望值与mocha js测试框架一起使用。我正在尝试测试数组中对象的包含,但chai在其文档中支持的包含
行为似乎并不像我预期的那样起作用:
柴网的例子是:
这是意料之中的事。但是,以下操作失败:
expect([{a: 1}]).to.be.an('array').and.include({a: 1})
错误如下:
(node:5639) ... AssertionError: expected [ { a: 1 } ] to include { a: 1 }
但这成功了:
expect([1,2]).to.be.an('array').and.include(1)
我做错了什么?根据文档:
当目标是数组时,.include
断言给定的val
是目标的成员
显然,数组[{a:1}]
的成员和匹配对象{a:1}
是两个不同的对象。因此,matchee不是目标的成员。另一方面,基本体使用它们的值而不是它们的引用进行匹配。因此,通过了以下断言:
expect([1,2]).to.be.an('array').and.include(1)
对于对象,文档中说:
当目标是对象时,.include
断言给定对象的val
属性是目标属性的子集
这意味着chai实际上会检查两个对象之间每个属性的值相似性。这就是为什么断言也在那里传递
要更正此问题,可以声明一次变量,并在以下两个位置使用它:
var obj = {a: 1};
expect([obj]).to.be.an('array').and.include(obj);
或者,您可以在目标阵列中执行以下操作:
expect([{a: 1}]).to.deep.include({a: 1});
expect([{a: 1}]).to.deep.include({a: 1});