reactjs - spyOn fonksiyonunun Jest tarafından çağrılması beklendi
Şu anda oluşturduğum yöntemleri test etmeye çalışıyorum ve if ifademdeki yöntemler çağrılmıyor. Ve tamamen kafam karıştı. Jest konusunda da yeniyim, bu yüzden muhtemelen kaçırdığım basit bir şeydir.
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);
}
};bu aldığım hata
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 | });Cevap #1
Kendi içinde başka fonksiyonları çağıran fonksiyonlar içeren bir modülü test etme konusunda bir sınırlama vardır. Daha fazla bilgi için bu makaleye bakın. O makalede bununla başa çıkmanın birkaç yolu vardır, bu yüzden benim kaba uygulamama dalmadan önce önce ona göz atmanızı öneririm çünkü kod yapınızla %100 çalışmayabilir.
Çalışan Örnek:
CodesandBox
Araçlar
Orijinalinizden biraz değiştirilmiş, bu nedenle gerekirse bunu yardımcı modüllerinizde taklit etmeniz gerekebilir.
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;
Test Örneği
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);
});
});
