sinon 存根调用假调用实际函数

问题描述

我想为一个函数编写单元测试用例以确保它是否正常工作。所以我为那个特定的函数创建了存根,当我试图调用假那个存根时,这个函数实际上是被调用而不是假调用。以下是我的场景:

  • 我有一个主函数,我在其中调用函数 saveData(**)。
  • saveData(**) 函数正在调用 AWS SQS 将消息保存到数据库

以下是我的主要功能:

'use strict';
async function mainFunction() {
  try {
    await saveData(
      name,age,);
    return true;
  } catch (e) {
    console.log('Error - [%s]',e);
    return null;
  }
}    
module.exports = { mainFunction };

下面是我的 saveData(**) 函数:

'use strict';
const AWS = require('aws-sdk');
const sqs = new AWS.SQS();
const saveData = async (
  name,) => {
    await sendMessage(JSON.stringify(dbData));
    const params = {
        DelaySeconds: <some_delay>,MessageAttributes: <messageAttributes>,MessageBody: {name:name,age:age},QueueUrl: <URL_FOR_QUEUE>,};
      return sqs.sendMessage(params).promise();
  return true;
};
module.exports = {
  saveData,};

我的测试用例是,

'use strict';

const express = require('express');
const bodyParser = require('body-parser');
require('app-module-path').addPath('./src');
const sinon = require('sinon');
const app = express();
const sqsSender = require('lib/queue');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const main = require('../../../src/main-function');
const routes = require('routes');
routes.configure(app);
let mainFunctionStub;
let saveDataStub;

describe('/v1/main',() => {
  beforeEach(() => {
    mainFunctionStub = sinon.stub(main,'mainFunction');
    saveDataStub = sinon.stub(sqsSender,'saveData');
  });
  describe('Test',() => {
    it(`should return success`,(done) => {
      const name = 'Name';
      const age = 'Age';
      saveDataStub.resolves({
        name,});
    });
  });

  afterEach(() => {
    mainFunctionStub.restore();
    mainFunctionStub.reset();

    saveDataStub.restore();
    saveDataStub.reset();
  });
});

但是这个测试又回来了,

error: Jun-20-2021 20:07:05:    Error - [Error [ConfigError]: Missing region in config

和,

Error: Timeout of 3500ms exceeded.

从这个错误我可以说这实际上是在调用 SQS 函数而不是伪造。我该如何解决这个问题,或者我如何伪造调用这个函数?我是这个单元测试的新手,所以任何帮助都会得到帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)