Tests de envío que solo confirman el código
TypeScript · El servicio de checkout de una tienda online · Tests · dificultad 2/3 · ~8 min
El servicio de checkout necesita una calculadora del coste de envío. Un compañero de equipo le pasó al asistente de IA las reglas de precios de la especificación del producto y le pidió "calculateShipping(order) con tests". La función y sus tests llegaron de una sola vez, y la ejecución de los tests está en verde.
Estás revisando la función y sus tests juntos. Los tests visibles son los que escribió el asistente; trátalos como parte del código en revisión, no como un oráculo independiente.
Las reglas de precios de la especificación:
- Un pedido estándar cuyo subtotal es 100 o más tiene envío gratis.
- Si no, el coste es una tarifa base de 5.99, más 1.50 por cada kilogramo o fracción por encima de 2 kg (2.0 kg no añade nada, 2.1 kg añade un kilogramo, 3.0 kg añade uno, 3.01 kg añade dos).
- El envío exprés suma 9.99 a lo que sería el coste estándar, así que un pedido con envío gratis paga 9.99 por el exprés.
- El resultado se redondea a dos decimales.
Decide si los tests demuestran de verdad las reglas, y si la implementación las sigue.
Repara el código hasta que pasen las pruebas ocultas.
code.ts
Pruebas visibles (pasan con el código tal como está)
import { describe, it, expect } from "@debunk/harness";
import {
calculateShipping,
BASE_RATE,
PER_EXTRA_KG,
EXPRESS_SUPPLEMENT,
} from "./code";
describe("calculateShipping", () => {
it("ships free above the threshold", () => {
expect(calculateShipping({ subtotal: 150, weightKg: 1 })).toBe(0);
});
it("charges the base rate plus the per-kg surcharge", () => {
expect(calculateShipping({ subtotal: 40, weightKg: 1 })).toBe(BASE_RATE);
expect(calculateShipping({ subtotal: 40, weightKg: 4 })).toBe(BASE_RATE + 2 * PER_EXTRA_KG);
});
it("adds the express supplement", () => {
expect(calculateShipping({ subtotal: 40, weightKg: 1, express: true })).toBe(
BASE_RATE + EXPRESS_SUPPLEMENT,
);
});
});