我正在使用包aws-param-store,并且正在尝试编写单元测试,这些单元测试将对getParametersByPath()的调用存根。包可以在这里找到:https://www.npmjs.com/package/aws-param-store
下面是我的sinon代码,用于存根调用。函数getParametersByPath是一个异步函数,所以我尝试返回一个已解析的promise来存根它:
const awsParameterStore = require('aws-param-store');
const sinon = require("sinon");
let sandbox = sinon.createSandbox();
// In My Test:
let parms = new Map();
parms.set("key1","value1");
parms.set("key2","value2");
sandbox.stub(awsParameterStore,'getParametersByPath').callsFake(async function(prefix){
console.log("INSIDE STUB for getParametersByPath:" + prefix);
return Promise.resolve(parms);
});我的应用程序调用函数,如下所示:
let parameters = await awsParameterStore.getParametersByPath("/foo");但是,我得到的不是伪参数的Map,而是一个空对象{}。我可以看到存根正在被调用。关于如何正确地存根以便我可以在单元测试中返回一些伪参数,您有什么想法吗?谢谢!
发布于 2020-01-17 22:30:00
我试过检查你的代码,它完全没问题。
import test from 'ava'
const awsParameterStore = require('aws-param-store');
const sinon = require('sinon')
test('test stub', async t => {
let parms = new Map();
parms.set("key1","value1");
parms.set("key2","value2");
parms.set("key3","value3");
parms.set("key4","value4");
sinon.stub(awsParameterStore, 'getParametersByPath').callsFake(async function(prefix){
console.log("INSIDE STUB for getParametersByPath:" + prefix)
return Promise.resolve(parms);
})
const res = await awsParameterStore.getParametersByPath('/some-prefix')
console.log(JSON.stringify(res))
res.forEach((value, key) => {
console.log(`[${key}]= ${value}`)
})
t.true(true)
})什么是weir:
console.log -显示结果为{}
但是,如果您逐个调试或记录值,您可以看到存根运行良好:
Debugger attached.
INSIDE STUB for getParametersByPath:/some-prefix
{}
[key1]= value1
[key2]= value2
[key3]= value3
[key4]= value4
✔ test stub更新映射:问题是如何通过JSON.stringify()记录映射。因此,您必须将映射记录为:
console.log(JSON.stringify(...res))
发布于 2020-02-28 18:01:37
以下是单元测试解决方案:
index.js
const awsParameterStore = require('aws-param-store');
async function main() {
let parameters = await awsParameterStore.getParametersByPath('/foo');
return parameters;
}
module.exports = main;index.test.js
const main = require('./');
const sinon = require('sinon');
const awsParameterStore = require('aws-param-store');
const { expect } = require('chai');
let sandbox = sinon.createSandbox();
describe('59787603', () => {
it('should pass', async () => {
let parms = new Map();
parms.set('key1', 'value1');
parms.set('key2', 'value2');
sandbox.stub(awsParameterStore, 'getParametersByPath').resolves(parms);
const actual = await main();
expect(actual).to.be.eql(parms);
});
});100%覆盖的单元测试结果:
59787603
✓ should pass
1 passing (11ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
index.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------源代码:https://github.com/mrdulin/expressjs-research/tree/master/src/stackoverflow/59787603
https://stackoverflow.com/questions/59787603
复制相似问题