我正在嘗試存根以下代碼
async function logUpdate(client) {
const results = await client.query(query.toParam());
const { count, timestamp } = results.rows[0];
await db.updateDatasourceLogs(destdb, DB.src, TABLES.src, timestamp, count);
}
這是我用來存根上面代碼的以下代碼
fakeClient = {
query: sinon.stub().resolves(fakeRows),
};
const rowData = {
count: 1,
timestamp: ''
};
fakeRows = {
rows: sinon.stub().returns([rowData]),
};
fakeSequel = {
useFlavour: sinon.stub().returns(toParam: () => false,),
};
我收到解構錯誤
型別錯誤:無法解構count“未定義”或“空”的屬性。
在線
const { count, timestamp } = results.rows[0];
如何存根上面的行?
uj5u.com熱心網友回復:
如果我們查看logUpdate函式體,我們會看到它以以下兩行開頭:
const results = await client.query(query.toParam());
const { count, timestamp } = results.rows[0];
這段代碼說:
- 等待呼叫回傳的 Promise 并將其
client.query分配給名為 的變數results。 results是一個具有稱為屬性的物件,rows它是一個陣列,其第 0 個元素應該是一個具有count和timestamp屬性的物件- 我們將其解構為區域變數。
這意味著結果的值如下所示:
{
"rows": [
{
"count": 1
"timestamp": "0"
}
]
}
但是,在我們的存根代碼中,我們有以下內容:
fakeRows = {
rows: sinon.stub().returns([rowData]),
};
它說,fakeRows是一個物件rows,其價值屬性是一個函式即回傳 [rowData]。
如果我們在沒有 sinon 的情況下實作這個物件,它看起來像:
{
"rows": function () {
return [
{
"count": 1
"timestamp": "0"
}
];
}
}
請注意logUpdate預期的結構與fakeRows實際提供的結構之間的區別。具體來說,logUpdate期望results有一個rows Array,但是,對于我們的存根代碼,它有一個rows Function!
我們可以簡單地通過直接fakeRows參考我們的來解決這個問題rowData:
const fakeRows = {
rows: [rowData]
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337932.html
標籤:javascript 单元测试 嘲笑 诗浓
上一篇:Jest:模擬NPM模塊方法
