Javascript 如何测试使用外部API中复杂对象的函数?
我有一个功能:Javascript 如何测试使用外部API中复杂对象的函数?,javascript,jestjs,Javascript,Jestjs,我有一个功能: // helper.js export const someFunction = (complexObj1, complexObj2) => { const someObj = complexObj1.generateAnObject(); const objList = someObj.generateListOfObjects(); for (const obj of objList) { obj.performAction(); } };
// helper.js
export const someFunction = (complexObj1, complexObj2) => {
const someObj = complexObj1.generateAnObject();
const objList = someObj.generateListOfObjects();
for (const obj of objList) {
obj.performAction();
}
};
正如你所看到的,它是一个执行大量任务的空函数。“complexObj1”和“complexObj2”对象及其附带的函数都是从我正在使用的API生成的
我想测试的东西:
- 参数complexObj1和complexObj2是有效的对象
- Function中的someObj是一个有效对象,可能会检查某个属性是否存在
- objList返回一个有效的列表
- 循环中的每个对象都是有效对象
test("Test someFunction", () => {
// not sure what to do here or what to mock etc
});
我不能像这样测试函数吗
如果有人能给我举个例子,告诉我如何测试这一点,甚至能给我指出正确的方向,我将不胜感激。我真的很想学习如何执行此操作。看起来函数接受一个对象,调用该对象上的函数以生成不同的对象,调用该对象上的函数以生成数组,然后对数组中的每个对象调用函数 由于它只知道传递给它的内容,因此可以传递适当的模拟数据并使用来确认它是否正常工作:
const someFunction = (complexObj1) => {
const someObj = complexObj1.generateAnObject();
const objList = someObj.generateListOfObjects();
for (const obj of objList) {
obj.performAction();
}
};
test('someFunction', () => {
const objList = [
{ performAction: jest.fn() },
{ performAction: jest.fn() }
];
const obj = {
generateAnObject: () => ({
generateListOfObjects: () => objList
})
};
someFunction(obj);
expect(objList[0].performAction).toHaveBeenCalled(); // Success!
expect(objList[1].performAction).toHaveBeenCalled(); // Success!
})
您所说的要测试的内容都不是您所展示的功能的责任。该函数的行为是什么?空测试函数不是合法的尝试。@jonrsharpe hey感谢您的响应。我想我只是想确保一切都正常运行,因为这将是一个由相当多的用户使用的产品。如果这个函数实际返回一个对象,那么我要测试的唯一场景就是确保返回的对象是有效的吗?否则,如果函数没有返回任何内容,那么就没有要测试的内容了?这是正确的吗?“如果函数没有返回任何东西,那么就没有什么需要测试的了?”-那么它的副作用呢?如果它不返回任何内容或以其他方式执行任何操作,那么就没有什么可测试的,但它存在的意义是什么。@jonrsharpe此函数的重点是执行一些必要的操作,并真正为组织服务。但是,嗯,我想我可以在这个功能之外测试你提到的副作用。。好吧,至少你在引导我朝着我想要的方向前进,所以谢谢你。谢谢你抽出时间回答问题,而不是投反对票。这是完美的,引导我走向我所寻找的方向。多谢各位