Unit Test vs Integration Test
La base de la stratégie de test iOS : les tests unitaires qui isolent chaque composant, ou les tests d'intégration qui valident les interactions entre eux ? Comment construire correctement sa pyramide de tests ?
Le moteur de test E2E multi-navigateurs, multi-langages de Microsoft
L'outil E2E JS/TS qui s'exécute dans le navigateur, axé sur l'expérience développeur
Il n'y a pas de réponse tranchée, mais un cadre clair existe. Si tu as besoin de plusieurs navigateurs, d'une parallélisation gratuite, de flux cross-origin/iframe ou d'un langage autre que JS/TS, Playwright est le choix par défaut en 2026. Si tu as une suite Cypress large et saine, ainsi qu'un investissement dans le Cloud, une simple "différence d'outil" ne justifie pas une réécriture — Cypress est aujourd'hui plus mature en component testing. Une migration progressive, en commençant par les flux critiques, est plus rationnelle qu'une "réécriture de week-end".
| Catégorie | Playwright | Cypress |
|---|---|---|
| Performance | 8/10 | 7/10 |
| Facilité d'apprentissage | 7/10 | 8/10 |
| Écosystème | 8/10 | 7/10 |
| Communauté | 8/10 | 7/10 |
| Marché de l'emploi | 7/10 | 7/10 |
| Pérennité | 9/10 | 6/10 |
// Playwright Test - Flux de connexion et mock API (TypeScript)
import { test, expect } from '@playwright/test';
test.describe('Giris akisi', () => {
test('gecerli kullanici ile giris yapar ve dashboard gorur', async ({ page }) => {
// Mock réseau - aucune configuration supplémentaire requise
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 : attend que le locator soit 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 sans sélecteur recherche dans tout l'arbre de sous-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 - Flux de connexion et mock API (JavaScript/TypeScript)
describe('Giris akisi', () => {
it('gecerli kullanici ile giris yapar ve dashboard gorur', () => {
// Stub réseau avec 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');
// Retry automatique de Cypress : attend que l'élément soit 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();
// cy.origin() est obligatoire lors du passage à une autre origine
cy.origin('https://pay.example.com', () => {
cy.get('[data-cy=confirm-payment]').click();
cy.contains('Odeme onaylandi').should('be.visible');
});
});
});
// cypress.config.js — configuration E2E de base
module.exports = {
e2e: {
baseUrl: 'http://localhost:3000',
experimentalRunAllSpecs: true,
setupNodeEvents(on, config) {
return config;
},
},
};Il n'y a pas de réponse tranchée, mais un cadre clair existe. Si tu as besoin de plusieurs navigateurs, d'une parallélisation gratuite, de flux cross-origin/iframe ou d'un langage autre que JS/TS, Playwright est le choix par défaut en 2026. Si tu as une suite Cypress large et saine, ainsi qu'un investissement dans le Cloud, une simple "différence d'outil" ne justifie pas une réécriture — Cypress est aujourd'hui plus mature en component testing. Une migration progressive, en commençant par les flux critiques, est plus rationnelle qu'une "réécriture de week-end".
Obtenir une consultation gratuiteSi tu as besoin de plusieurs navigateurs (Chromium+Firefox+WebKit), d'une parallélisation gratuite intégrée, ou d'une flexibilité de langage entre TS/Python/Java/.NET, Playwright est le choix par défaut en 2026. Si tu as déjà une large suite Cypress, que ton équipe est habituée au runner interactif et que tu as déjà investi dans Cypress Cloud, la migration ne se justifie pas par la seule 'différence d'outil' — une migration progressive est plus rationnelle.