我试图测试一个调用连接到amazon AWS的其他两个函数的函数。考虑到这一点,我不想调用称为AWS的真实函数 - 我试图将它们存根。但是,每次运行我的测试时,它都会调用真正的函数而不是我的存根。
我对测试很陌生,可能会遗漏一些东西,但无法找到任何其他问题的解决方案。
我使用jasmine
和sinon
我的代码如下:
const cache = new Map<string, Set<string>>();
//Function to be tested - inside class XYZ
export function functionToBeTest(events: Event[]): Promise<Event[]> {
cache.clear();
let promises: Array<Promise<void>> = [];
promises = events.map((event) => {
let foundId: string;
return functionA(event.Id)
.then((id: string) => {
foundId = id;
if (!cache.has(id)) {
return functionB(id);
}
})
.then((regDev) => {
cache.set(foundId, new Set(regDev));
})
.catch((err) => {
log.error({ err: err });
return Promise.reject(err);
});
});
return Promise.all(promises)
.then(() => {
return Promise.resolve(events)
});
}
我想要存根的功能:
export function functionA(id: string): Promise<string> {//Return Promise<string>
//some code
return anotherFunction(id);
}
export function functionB(organizationId: string): Promise<string[]> {
//Goes to amazon do something and return Promise<string[]>
}
我省略了functionA
和functionB
的实现,因为我不关心他们做了什么,或者我只需要将它们存根,所以我在functionToBeTest
内测试逻辑
我的测试套件如下:
import * as sinon from 'sinon';
describe('testing functionToBeTest()', () => {
let stubA: sinon.SinonStub;
let stubB: sinon.SinonStub;
beforeEach(() => {
stubA = sinon.stub(xyz, 'functionA');
stubA.onFirstCall().resolves('1');
stubA.onSecondCall().resolves('2');
stubB = sinon.stub(xyz, 'functionB');
stubB.onFirstCall().resolves(['1']);
stubB.onSecondCall().resolves(['2']);
});
afterEach(() => {
stubA.restore();
stubB.restore();
});
it('should populate the cache', (done) => {
let events: Event[] = [
{
timestamp: 1,
eventType: EventType.PC,
id: '1'
},
{
timestamp: 2,
eventType: EventType.BU,
id: '2'
}
];
xyz.functionToBeTest(events)// Here should call the real function and inside it should call the stub functions
.then((result) => {
//expectations
})
.then(() => {
done();
})
.catch((err) => {
done.fail(err);
});
});
});
正如我所说,当我运行此测试时,它永远不会调用存根函数并始终从实际函数内部返回错误(应该是存根的)。
任何人都可以帮忙吗?我可能做错了但是我看不出有什么问题。
答案 0 :(得分:0)
想出它是一个有问题的参考。它不是调用方法存根,而是调用真正的存根。要解决这个问题,我必须更改我的原始类导出它,并在我想在外面使用的方法上使用info sort
。