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

时间:2017-09-08 20:00:40

标签: javascript chai

在早期版本中,Chai 4及更高版本的.nested.property().deep.property()。我所描述的问题在Chai 4或更高版本中都有.nested.property(),在4之前的版本中都有.deep.property()

我一直在尝试使用.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");

1 个答案:

答案 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无效的情况下也是如此。