繁体   English   中英

无法使用“ .nested”标志和括号表示法检查嵌套对象的属性

[英]Unable to check a nested object property by using the “.nested” flag and bracket notation

Chai 4和更高版本的.nested.property() .deep.property()在早期版本中是.deep.property() 我所描述的问题存在都与.nested.property()在湾仔4或更高版本,并与.deep.property()在之前的版本4。

我一直在尝试使用.nested标志和方括号表示法来检查嵌套属性的值。 当我尝试寻址到数组时,它可以工作,但是如果我想通过执行"a['name']"来寻址到对象,则它不起作用。 这是令人困惑的,因为在JavaScript中a.namea["name"]都引用相同的属性,在某些情况下,由于名称的结构,我们必须使用方括号。

我在下面有一个例子。 如果运行此命令,则将看到"first expect passed" ,但不会看到"second expect passed"因为第二个断言失败。

const { expect } = require("chai");

const obj = {
    "a": ["foo", "bar"],
    "b": { "foo-bar": 1},
};

expect(obj).to.have.nested.property("a[1]").equal("bar");
console.log("first expect passed");


expect(obj).to.have.nested.property("b['foo-bar']").equal(1);
console.log("second expect passed");

这不是明确记载,但问题是,柴实际上不解释,你传递给参数.property完全相同的方式JavaScript解释会。 人们很自然地去b['foo-bar']因为这是你所期望的,你必须做,如果你在访问中的JavaScript代码的性质是什么,但是这不会与柴工作。 您要做的是:

expect(obj).to.have.nested.property("b.foo-bar").equal(1);
console.log("second expect passed");

.property的括号符号基本上仅用于寻址到数组。 对于对象,即使在无效的JavaScript情况下,也必须使用点符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM