在早期版本中,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");
答案 0 :(得分:0)
这个没有明确记录,但问题是Chai实际上并没有将您传递给.property
的参数解释为 exact 与JavaScript解释器相同的方式。与b['foo-bar']
一起使用是很自然的,因为如果您在JavaScript代码中访问该属性,那么您希望您有做什么,但是这不会与柴一起工作。你要做的是:
expect(obj).to.have.nested.property("b.foo-bar").equal(1);
console.log("second expect passed");
.property
中的括号表示法主要仅用于寻址数组。对于对象,您必须使用点表示法,即使在JavaScript无效的情况下也是如此。