im当前正在尝试测试我创建的方法以及if语句中的方法没有被调用。和即时通讯完全茫然。我太开玩笑了,尽管如此,所以我肯定它有些简单的提示。
describe('isSingleScreen', () => {
beforeEach(() => {
jest.clearAllMocks();
jest.spyOn(utilMethods, 'isDualScreen').mockReturnValue(true);
});
it('autoScreenAdd', () => {
// Arrange
const singleScreenAddSpy = jest.spyOn(
singleScreenMethods,
'singleScreenAdd'
);
const dualScreenAddSpy = jest.spyOn(dualScreenMethods, 'dualScreenAdd');
// Act
utilMethods.autoScreenAdd({});
// Assert
expect(singleScreenAddSpy).toBeCalledTimes(0);
expect(dualScreenAddSpy).toBeCalled();
expect(dualScreenAddSpy).toBeCalledTimes(1);
});
});
export const isDualScreen = (): boolean => {
return Dimensions.get('window').width > 1000 ? true : false;
};
export const autoScreenAdd = (element: IDualComponent) => {
if (isDualScreen()) {
dualScreenAdd(element);
} else {
singleScreenAdd(element);
}
};
这是我收到的错误
expect(jest.fn()).toBeCalledTimes(expected)
Expected number of calls: 0
Received number of calls: 1
30 | // Assert
31 | expect(autoScreenAddSpy).toBeCalled();
> 32 | expect(singleScreenAddSpy).toBeCalledTimes(0);
| ^
33 | expect(dualScreenAddSpy).toBeCalled();
34 | expect(dualScreenAddSpy).toBeCalledTimes(1);
35 | });
答案 0 :(得分:2)
如何测试一个模块,该模块包含的功能会调用同一模块中的其他功能,因此存在局限性。 See this article for some more insight。该文章中解决此问题的方法很少,因此我建议在深入研究我的粗略实现之前先对其进行研究,因为它可能不适用于100%的代码结构。
与原始版本略有修改,因此您可能需要在util模块中模仿它。
const isDualScreen = () => {
return window.width > 1000 ? true : false;
};
const autoScreenAdd = element => {
if (utilMethods.isDualScreen()) {
utilMethods.dualScreenAdd(element);
} else {
utilMethods.singleScreenAdd(element);
}
};
const dualScreenAdd = element => {
return element;
};
const singleScreenAdd = element => {
return element;
};
// This is important, it allows you to mock the functions properly in your tests.
// Use this same structure in your singleScreenMethods and dualScreenMethods modules
const utilMethods = {
singleScreenAdd,
dualScreenAdd,
autoScreenAdd,
isDualScreen
};
export default utilMethods;
import utilMethods from "./utils";
describe("isSingleScreen", () => {
beforeEach(() => {
jest.clearAllMocks();
jest.spyOn(utilMethods, "isDualScreen").mockReturnValue(true);
});
it("autoScreenAdd", () => {
// Arrange
const singleScreenAddSpy = jest.spyOn(utilMethods, "singleScreenAdd");
const dualScreenAddSpy = jest.spyOn(utilMethods, "dualScreenAdd");
// Act
utilMethods.autoScreenAdd({});
// Assert
expect(singleScreenAddSpy).toHaveBeenCalledTimes(0);
expect(dualScreenAddSpy).toHaveBeenCalledTimes(1);
});
});