Pasa código roto a Cerewro y obtén el bug detectado, la causa raíz explicada en lenguaje sencillo y el código corregido. También refactoriza funciones complejas, añade tipado TypeScript, mejora el rendimiento y genera tests automáticamente.
Este código JavaScript me da el error "TypeError: Cannot read properties of undefined (reading 'map')". Analiza el código, explica la causa y corrígelo:
[pega tu código aquí]
// ❌ Código original con bug
function renderUsers(data) {
return data.users.map(u => `${u.name} `).join('');
}
renderUsers(null); // TypeError: Cannot read properties of null
// ✅ Código corregido por Cerewro
function renderUsers(data) {
if (!data?.users?.length) return 'No hay usuarios ';
return data.users.map(u => `${u.name ?? 'Sin nombre'} `).join('');
}
Refactoriza este código PHP con callbacks anidados (callback hell) para usar async/await o Promises. Mantén la misma funcionalidad, mejora la legibilidad y añade manejo de errores con try/catch:
[pega el código aquí]
// ❌ Antes: callbacks anidados
getUser(id, (err, user) => {
if (err) return handleError(err);
getOrders(user.id, (err, orders) => {
if (err) return handleError(err);
getProducts(orders, (err, products) => {
if (err) return handleError(err);
renderPage(products);
});
});
});
// ✅ Después: async/await (generado por Cerewro)
async function loadUserData(id) {
try {
const user = await getUser(id);
const orders = await getOrders(user.id);
const products = await getProducts(orders);
renderPage(products);
} catch (err) {
handleError(err);
}
}
Genera tests Jest completos para esta función JavaScript. Incluye casos: entrada normal, entrada vacía, valores límite, tipos incorrectos y errores esperados:
function calcularDescuento(precio, porcentaje) {
if (precio <= 0 || porcentaje < 0 || porcentaje > 100)
throw new Error('Parámetros inválidos');
return precio * (1 - porcentaje / 100);
}
describe('calcularDescuento', () => {
test('descuento normal', () => {
expect(calcularDescuento(100, 20)).toBe(80);
});
test('0% descuento devuelve precio original', () => {
expect(calcularDescuento(50, 0)).toBe(50);
});
test('100% descuento devuelve 0', () => {
expect(calcularDescuento(100, 100)).toBe(0);
});
test('precio negativo lanza error', () => {
expect(() => calcularDescuento(-10, 10)).toThrow('Parámetros inválidos');
});
test('porcentaje > 100 lanza error', () => {
expect(() => calcularDescuento(100, 150)).toThrow('Parámetros inválidos');
});
});
Convierte este archivo JavaScript a TypeScript: añade tipos a todas las funciones, crea interfaces para los objetos, usa generics donde sea apropiado y marca como optional los campos que pueden ser undefined:
[pega el archivo .js aquí]