我正在尝试对以下代码进行存根处理
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
TypeError:无法对属性进行“未定义”或“null”。
在线
const { count, timestamp } = results.rows[0];
如何对上面的行进行存根?
发布于 2021-10-26 09:44:38
如果我们查看您的logUpdate
函数的主体,我们会看到它以以下两行开头:
const results = await client.query(query.toParam());
const { count, timestamp } = results.rows[0];
这条守则说:
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
数组,但是在我们的短代码中,它有一个rows
函数!
我们可以通过让fakeRows
直接引用我们的rowData
来解决这个问题:
const fakeRows = {
rows: [rowData]
};
https://stackoverflow.com/questions/69716031
复制相似问题