当前位置: 首页 > 知识库问答 >
问题:

Sinon存根不允许对实际功能进行测试覆盖

严言
2023-03-14

以下是正在测试的功能:

export const callStoredProcedure = async (procedureName, procedureArgs)
 => {
  let resultSet: any;
  try {
    await knexClient.transaction(async trx => {
      await trx.raw(`CALL ${procedureName}(${procedureArgs});`).then(result => {
        if (result[0] && result[0][0]) {
          resultSet = JSON.stringify(result[0][0]);
        }
      });
    });
  } catch (err) {
    console.log(err);
  }
  return resultSet;
};

在这里,我在一个beforeach块中模拟knexClient:

 let knexClientMock;
  beforeEach(() => {
    // Stub Data source clients
    const rawStub = sinon.stub().resolves([{ affectiveRows: 0, insertId: 0 }]);
    knexClientMock = sinon.stub(knexClient, 'transaction').callsFake(
      async (): Promise<any> => {
        return {
          raw: rawStub,
        };
      },
    );
  });

但是,当我运行测试时,if语句if(结果[0]

mock似乎工作正常,因为它使用mockknexClient。事务,但它保留了未覆盖的其余行。我想我只是想用mock promise result模拟raw函数,并允许。然后运行函数。

我怎样才能只模拟knexClient.transaction.raw函数,并允许其余代码具有测试覆盖?


共有1个答案

林德华
2023-03-14

问题是您的测试存根没有正确模拟正在使用的对象:

代码中的事务方法接受一个参数(回调函数)并调用此回调,将具有异步原始方法的事务执行器传递给它。

测试存根使“transaction”方法返回一个具有异步原始方法的对象。

在为代码编写单元测试时,首先了解代码的工作原理非常重要。否则,编写无意义的测试是非常容易的,这些测试将无法防止引入bug。

 类似资料:
  • 我正在尝试使用sinon存根替换一个可能需要很长时间的函数。但是当我运行测试时,测试代码似乎没有使用sinon存根。 这是我要测试的代码。 这是测试代码。 我得到一个断言错误 我做错了什么?为什么不使用存根?摩卡的测试框架。

  • 我尝试了一个虚拟模块,并存根,但不工作。 应用程序.js test.js 我尝试了以下建议:sinon stub不替换函数 但还是一样。它不能取代功能。

  • 我正在尝试测试一个es6类,但我不知道如何用sinon存根一个函数模块。测试不是sm下的覆盖线。callSoap函数 我试试这个: module.js index.js(这是模块的索引) my-class.js test.js 我尝试在soapModule上存根,但生成了以下错误: 无法存根不存在的自己的属性call Soap

  • 问题内容: 我试图存根使用此对象的猫鼬依赖项: 使用这个问题的答案,我尝试这样做: 但是我得到了错误: TypeError:尝试包装未定义的属性另存为函数 我也尝试过这个: 然后我得到了错误: TypeError:应该包装对象的属性 有人能帮忙吗?我究竟做错了什么? 问题答案: 我已经分析了猫鼬的来源,并且认为这是不可能的。保存功能不是在模型上定义的,而是由钩子npm动态生成的,该钩子启用了前/后

  • 我在获取一个sinon存根以返回/解析另一个sinon存根时遇到问题。我正在使用西农、柴、柴和摩卡。 我正在按顺序执行许多异步任务,我想测试的代码看起来像这样: 我尝试为此创建存根的尝试如下所示: “saveit”方法在Terminal.prototype,这就是为什么我需要在那里存根它。当我尝试运行它时,我收到错误消息: 在线上: 但如果我在控制台中转储终端对象,它看起来很好,就像任何其他存根对

  • 本文向大家介绍您如何进行功能测试?,包括了您如何进行功能测试?的使用技巧和注意事项,需要的朋友参考一下 功能测试 作为功能测试的一部分,应该对业务指定的所有用户要求进行良好的测试。功能测试要求在类似于客户要求的环境中进行测试。所有边界条件,负面情景都被考虑在内。应用程序的每个功能都应该可以很好地运行,并且不会出现任何错误。 功能测试的目的 应该测试运行良好的应用程序预期的基本要求。用户界面应易于使