Unit Test vs Integration Test
La base de la estrategia de testing en iOS: ¿tests unitarios que aíslan la unidad o tests de integración que validan la interacción entre componentes? ¿Cómo construir correctamente la pirámide de testing?
El motor de test E2E multi-navegador y multi-lenguaje de Microsoft
Herramienta de test E2E JS/TS que se ejecuta dentro del navegador, centrada en la experiencia de desarrollador
No hay una respuesta única, pero sí un marco claro. Si necesitas múltiples navegadores, paralelismo gratuito, flujos cross-origin/iframe o un lenguaje distinto de JS/TS, Playwright es la opción por defecto en 2026. Si ya tienes una suite Cypress amplia y saludable, además de una inversión en Cloud, la sola "diferencia de herramienta" no justifica una reescritura — en component testing, Cypress sigue siendo más maduro hoy. Una migración gradual, priorizando los flujos críticos, es más racional que una "reescritura de fin de semana".
| Categoría | Playwright | Cypress |
|---|---|---|
| Rendimiento | 8/10 | 7/10 |
| Facilidad de aprendizaje | 7/10 | 8/10 |
| Ecosistema | 8/10 | 7/10 |
| Comunidad | 8/10 | 7/10 |
| Mercado laboral | 7/10 | 7/10 |
| A prueba de futuro | 9/10 | 6/10 |
// Playwright Test - Flujo de login y mock de API (TypeScript)
import { test, expect } from '@playwright/test';
test.describe('Giris akisi', () => {
test('gecerli kullanici ile giris yapar ve dashboard gorur', async ({ page }) => {
// Mock de red - no requiere configuración adicional
await page.route('**/api/login', async (route) => {
await route.fulfill({
status: 200,
contentType: 'application/json',
body: JSON.stringify({ token: 'test-token', user: { name: 'Ayse' } }),
});
});
await page.goto('/login');
await page.getByLabel('E-posta').fill('[email protected]');
await page.getByLabel('Sifre').fill('guclu-sifre-123');
await page.getByRole('button', { name: 'Giris Yap' }).click();
// Auto-wait: el locator espera hasta que sea visible
await expect(page.getByText('Hos geldin, Ayse')).toBeVisible();
await expect(page).toHaveURL('/dashboard');
});
test('checkout iframe icindeki odeme butonunu bulur (cross-frame)', async ({ page }) => {
await page.goto('/checkout');
// v1.63.0: frameLocator sin selector busca en todo el árbol de sub-frames
const payButton = page.frameLocator().getByRole('button', { name: 'Ode' });
await payButton.click();
await expect(page.getByText('Odeme basarili')).toBeVisible();
});
});
test('3 tarayicida paralel calisir (playwright.config.ts icinde tanimli)', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveTitle(/Ana Sayfa/);
});// Cypress - Flujo de login y mock de API (JavaScript/TypeScript)
describe('Giris akisi', () => {
it('gecerli kullanici ile giris yapar ve dashboard gorur', () => {
// Stub de red con cy.intercept
cy.intercept('POST', '/api/login', {
statusCode: 200,
body: { token: 'test-token', user: { name: 'Ayse' } },
}).as('loginRequest');
cy.visit('/login');
cy.get('[data-cy=email]').type('[email protected]');
cy.get('[data-cy=password]').type('guclu-sifre-123');
cy.get('[data-cy=submit]').click();
cy.wait('@loginRequest');
// Reintento automático de Cypress: espera hasta que el elemento sea visible
cy.contains('Hos geldin, Ayse').should('be.visible');
cy.url().should('include', '/dashboard');
});
it('cross-origin odeme sayfasina yonlenir (cy.origin gerekli)', () => {
cy.visit('/checkout');
cy.get('[data-cy=pay-button]').click();
// Al cambiar a un origin diferente, cy.origin() es obligatorio
cy.origin('https://pay.example.com', () => {
cy.get('[data-cy=confirm-payment]').click();
cy.contains('Odeme onaylandi').should('be.visible');
});
});
});
// cypress.config.js — configuración E2E básica
module.exports = {
e2e: {
baseUrl: 'http://localhost:3000',
experimentalRunAllSpecs: true,
setupNodeEvents(on, config) {
return config;
},
},
};No hay una respuesta única, pero sí un marco claro. Si necesitas múltiples navegadores, paralelismo gratuito, flujos cross-origin/iframe o un lenguaje distinto de JS/TS, Playwright es la opción por defecto en 2026. Si ya tienes una suite Cypress amplia y saludable, además de una inversión en Cloud, la sola "diferencia de herramienta" no justifica una reescritura — en component testing, Cypress sigue siendo más maduro hoy. Una migración gradual, priorizando los flujos críticos, es más racional que una "reescritura de fin de semana".
Solicita una consultoría gratuitaSi necesitas múltiples navegadores (Chromium+Firefox+WebKit), quieres paralelismo gratuito integrado o necesitas flexibilidad de lenguaje entre TS/Python/Java/.NET, Playwright es la opción por defecto en 2026. Si ya tienes una suite Cypress amplia, tu equipo está acostumbrado al runner interactivo y ya has invertido en Cypress Cloud, la migración no se justifica solo por la 'diferencia de herramienta' — una migración gradual es más racional.