Код-ревью Middle ИИ и тесты обновлено
Код-ревью: тесты, которые написал ИИ
Вопрос
Ассистент сгенерировал тесты для функции applyPromo(cart, code), которая применяет промокод к корзине. Найдите проблемы в тестах.
import { applyPromo } from './promo';
import * as rules from './rules';
jest.mock('./rules');
describe('applyPromo', () => {
it('applies promo', () => {
(rules.discountFor as jest.Mock).mockReturnValue(10);
const cart = { total: 100, items: [{ id: 1, price: 100 }] };
const result = applyPromo(cart, 'SALE10');
expect(result).toBeDefined();
});
it('calculates total', () => {
const cart = { total: 200, items: [{ id: 1, price: 200 }] };
const expected = applyPromo(cart, 'SALE10').total;
expect(applyPromo(cart, 'SALE10').total).toBe(expected);
});
it('works', () => {
const result = applyPromo({ total: 50, items: [] }, 'SALE10');
expect(result.total).toBeTruthy();
});
});
Коротко
Типичный набор сгенерированных тестов: зелёные, но ничего не ловят. Нужно мокать только внешнее (например, хранилище промокодов), а расчёт выполнять по-настоящему, проверять точные суммы, посчитанные по требованиям, и добавить краевые случаи.
Что должен найти ревьюер
- Ошибкастрока 4Замокан модуль rules, в котором живёт расчёт скидки: тест проверяет мок, а не логику промокода.
- Ошибкастрока 11Утверждение
toBeDefinedпройдёт при любом результате. Нужно точное значение итоговой суммы. - Ошибкастрока 16Тавтология: ожидание посчитано той же функцией, тест не упадёт ни при каком баге.
- Ошибкастрока 22
toBeTruthyдля суммы: пройдёт и при неверной скидке. Плюс пустая корзина с суммой 50 это странные данные. - Стильстрока 20Названия
worksиapplies promoничего не говорят о поведении. Лучше «SALE10 снижает 200 до 180». - ОшибкаНет краевых случаев: несуществующий и просроченный код, пустая корзина, повторное применение, скидка больше суммы.
Разбор
Типичный набор сгенерированных тестов: зелёные, но ничего не ловят. Нужно мокать только внешнее (например, хранилище промокодов), а расчёт выполнять по-настоящему, проверять точные суммы, посчитанные по требованиям, и добавить краевые случаи. Хорошая проверка: сломать расчёт скидки и убедиться, что хотя бы один тест покраснел.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.