refactor: Создана функция processBall для инкапсуляции логики проверки столкновения мяча со стенами

This commit is contained in:
Ilia Mashkov
2026-07-19 17:28:56 +03:00
parent e637d4e62e
commit dccdb02f73
2 changed files with 99 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
import { Ball } from '../../entities/ball/ball';
import { processBall } from './processBall';
describe('processBall', () => {
it('Возвращает null при неверных типах аргументов', () => {
const ball = new Ball(100, 100, 10, 3);
expect(processBall(null, 800, 600)).toBeNull();
expect(processBall(ball, '800', 600)).toBeNull();
expect(processBall(ball, -1, 600)).toBeNull();
expect(processBall(ball, 800, -1)).toBeNull();
});
it('Возвращает false, если мяч не касается стен', () => {
const ball = new Ball(400, 300, 10, 3);
expect(processBall(ball, 800, 600)).toBe(false);
});
it('Отражает мяч от боковой стены и возвращает true', () => {
const ball = new Ball(10, 300, 10, 3);
ball.horizontalSpeed = -10;
expect(processBall(ball, 800, 600)).toBe(true);
expect(ball.x).toBe(ball.radius);
expect(ball.horizontalSpeed).toBe(10);
});
it('Отражает мяч от верхней стены и возвращает true', () => {
const ball = new Ball(400, 10, 10, 3);
ball.horizontalSpeed = 0;
ball.verticalSpeed = -10;
expect(processBall(ball, 800, 600)).toBe(true);
expect(ball.y).toBe(ball.radius);
expect(ball.verticalSpeed).toBe(10);
});
it('Помечает мяч вышедшим за нижнюю границу', () => {
const ball = new Ball(400, 595, 10, 3);
expect(processBall(ball, 800, 600)).toBe(true);
expect(ball.status).toBe('out');
});
});