无法使用“.nested”标志和括号表示法检查嵌套对象 属性
Unable to check a nested object property by using the ".nested" flag and bracket notation
Chai 4 及更高版本的 .nested.property()
在早期版本中是 .deep.property()
。我描述的问题在 Chai 4 或更高版本中的 .nested.property()
和 4 之前的版本中的 .deep.property()
都存在。
我一直在尝试使用 .nested
标志和括号符号来检查嵌套 属性 的值。当我尝试寻址到数组时,它可以工作,但是如果我想通过执行 "a['name']"
来寻址到一个对象,它就不起作用。这是令人困惑的,因为在 JavaScript 中,a.name
和 a["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");
这没有明确记录,但问题是 Chai 实际上并没有以 exact 与 [=22= 相同的方式解释您传递给 .property
的参数] 口译员会。使用 b['foo-bar']
是很自然的,因为如果您访问 JavaScript 中的 属性,那是您希望 必须 做的事情代码,但这不适用于 Chai。你要做的是:
expect(obj).to.have.nested.property("b.foo-bar").equal(1);
console.log("second expect passed");
.property
中的括号表示法本质上仅用于对数组进行寻址。当涉及到对象时,你必须使用点符号,即使在它无效的情况下 JavaScript.
Chai 4 及更高版本的 .nested.property()
在早期版本中是 .deep.property()
。我描述的问题在 Chai 4 或更高版本中的 .nested.property()
和 4 之前的版本中的 .deep.property()
都存在。
我一直在尝试使用 .nested
标志和括号符号来检查嵌套 属性 的值。当我尝试寻址到数组时,它可以工作,但是如果我想通过执行 "a['name']"
来寻址到一个对象,它就不起作用。这是令人困惑的,因为在 JavaScript 中,a.name
和 a["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");
这没有明确记录,但问题是 Chai 实际上并没有以 exact 与 [=22= 相同的方式解释您传递给 .property
的参数] 口译员会。使用 b['foo-bar']
是很自然的,因为如果您访问 JavaScript 中的 属性,那是您希望 必须 做的事情代码,但这不适用于 Chai。你要做的是:
expect(obj).to.have.nested.property("b.foo-bar").equal(1);
console.log("second expect passed");
.property
中的括号表示法本质上仅用于对数组进行寻址。当涉及到对象时,你必须使用点符号,即使在它无效的情况下 JavaScript.