首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Sinon存根-模拟一个返回对象数组的函数。

Sinon存根-模拟一个返回对象数组的函数。
EN

Stack Overflow用户
提问于 2021-10-25 16:04:15
回答 1查看 380关注 0票数 2

我正在尝试对以下代码进行存根处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
}

下面是我用来对上面的代码进行存根的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  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”。

在线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const { count, timestamp } = results.rows[0];

如何对上面的行进行存根?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 09:44:38

如果我们查看您的logUpdate函数的主体,我们会看到它以以下两行开头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const results = await client.query(query.toParam());
const { count, timestamp } = results.rows[0];

这条守则说:

results.

  • results是一个具有名为rows的属性的对象,它是一个数组,它的第0元素应该是一个具有counttimestamp属性的对象--我们将其分解为局部变量。

这意味着结果的价值看起来如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "rows": [
    {
      "count": 1
      "timestamp": "0"
    }
  ]
}

但是,在我们的顽固代码中,我们有以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fakeRows = {
  rows: sinon.stub().returns([rowData]),
};

它表示fakeRows是一个具有rows属性的对象,其值是返回[rowData]的函数。

如果我们要在没有sinon的情况下实现这个对象,它应该如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "rows": function () {
    return [
      {
        "count": 1
        "timestamp": "0"
      }
    ];
  }
}

注意logUpdate所期望的结构与fakeRows实际提供的结构之间的区别。具体来说,logUpdate希望results有一个rows数组,但是在我们的短代码中,它有一个rows函数!

我们可以通过让fakeRows直接引用我们的rowData来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fakeRows = {
  rows: [rowData]
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69716031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文