Какие плюсы и минусы End-to-end

Ответ

Плюсы:

  • Проверяют работу системы целиком, как это увидит пользователь
  • Ловят интеграционные проблемы между компонентами
  • Хорошо имитируют реальное пользовательское поведение
  • Уменьшают необходимость ручного тестирования

Минусы:

  • Медленные по сравнению с юнит-тестами
  • Хрупкие — малейшие изменения в UI могут сломать тест
  • Сложные в отладке
  • Требуют поддержки тестового окружения

Пример с Cypress:

describe('Login', () => {
  it('should login successfully', () => {
    cy.visit('/login')
    cy.get('#email').type('user@example.com')
    cy.get('#password').type('password123')
    cy.get('button[type="submit"]').click()
    cy.url().should('include', '/dashboard')
  })
})

Ответ 18+ 🔞

Да ты послушай, что за дичь творится с этими тестами! Вот, например, e2e-тесты. С одной стороны, вроде как охуенно: они ж всю систему проверяют, как будто реальный юзер пришёл и начал тыкать. Ловят такие косяки, когда вроде каждый модуль по отдельности работает, а вместе нихуя не склеивается — интеграционные проблемы, короче. Имитируют поведение человека, что снижает потребность в ручном тестировании до пизды. Вроде бы красота.

А с другой стороны, ёпта, минусы такие, что волосы дыбом. Во-первых, они медленные, как черепаха в сиропе, по сравнению с юнит-тестами. Во-вторых, хрупкие, как яичко в руках слона: чихнул дизайнер, поменял селектор на кнопке — и всё, тест накрылся медным тазом, пизда. Отлаживать их — тот ещё геморрой. И ещё им нужно целое тестовое окружение подогнать, поднять, настроить... В общем, терпения ноль ебать.

Вот, смотри, пример на Cypress, чтобы было понятнее, о чём речь. Блок кода не трогаю, как велено.

describe('Login', () => {
  it('should login successfully', () => {
    cy.visit('/login')
    cy.get('#email').type('user@example.com')
    cy.get('#password').type('password123')
    cy.get('button[type="submit"]').click()
    cy.url().should('include', '/dashboard')
  })
})

Вот такая вот, блядь, палка о двух концах. С одной стороны — надёжность и полная картина, с другой — скорость и нервы, выброшенные в помойку. Выбирай, что тебе дороже.