【发布时间】:2021-09-04 11:31:58
【问题描述】:
我有一种情况,我想为一个函数编写单元测试用例,以确保它是否工作正常。因此,我为该特定函数创建了存根,当我尝试调用假存根时,该函数实际上被调用而不是假调用。以下是我的场景:
- 我有一个 main 函数,我从中调用函数 saveData(**)。
- saveData(**) 函数正在调用 AWS SQS 以将消息保存到 DB
下面是我的主要功能:
'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,
age,
) => {
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,
age,
});
});
});
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 函数而不是伪造。我怎样才能解决这个问题,或者我怎样才能假装调用这个函数?我是这个单元测试的新手,所以会有任何帮助。
【问题讨论】:
-
你想测试什么?
mainFunction或saveData? -
我想测试这两个功能的结合。例如。我想检查是否从 mainFunction 调用 saveData
标签: node.js unit-testing sinon stubbing sinon-chai