Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不';t数组包含检查是否按chai.js中的预期工作?_Javascript_Bdd_Assert_Chai_Expectations - Fatal编程技术网

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});