簡體   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