"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Cypress의 사용자 지정 명령 모범 사례: 세부 가이드

Cypress의 사용자 지정 명령 모범 사례: 세부 가이드

2024-07-30에 게시됨
검색:523

Best Practices for Custom Commands in Cypress: A Detailed Guide

소개

이전 게시물에서는 Cypress의 사용자 정의 명령 개념을 소개하고 이를 통해 테스트 프레임워크를 단순화하고 향상시키는 방법을 시연했습니다. 이 후속 게시물에서는 사용자 정의 명령을 생성하고 사용하는 모범 사례에 대해 더 자세히 살펴보고 테스트가 유지 관리 가능하고, 읽기 쉽고, 강력하다는 것을 보장하는 자세한 예를 제공합니다.

모범 사례가 중요한 이유

사용자 지정 명령을 만들 때 모범 사례를 따르면 테스트가 확장 가능하고, 이해하기 쉽고, 빠르게 업데이트될 수 있습니다. 적절하게 구조화된 사용자 정의 명령은 코드 중복을 크게 줄이고 테스트 스위트의 전반적인 품질을 향상시킬 수 있습니다.

사용자 정의 명령에 대한 모범 사례

1. 명령 이름을 명확하게 지정하세요.
명확하고 설명적인 이름을 사용하면 명령을 쉽게 이해하고 사용할 수 있습니다. 좋은 명령 이름은 추가 컨텍스트 없이 목적을 전달해야 합니다.
예:

// cypress/support/commands.js
Cypress.Commands.add('login', (email, password) => {
  cy.visit('/login');
  cy.get('input[name=email]').type(email);
  cy.get('input[name=password]').type(password);
  cy.get('button[type=submit]').click();
});

용법:

// cypress/integration/login.spec.js
describe('Login Tests', () => {
  it('Should login with valid credentials', () => {
    cy.login('[email protected]', 'password123');
    cy.url().should('include', '/dashboard');
  });
});

2. 명령 매개변수화
유연성과 재사용성을 높이기 위해 명령은 매개변수를 허용해야 합니다. 이를 통해 동일한 명령을 다른 데이터와 함께 다른 상황에서 사용할 수 있습니다.

예:

// cypress/support/commands.js
Cypress.Commands.add('fillForm', (formData) => {
  cy.get('input[name=firstName]').type(formData.firstName);
  cy.get('input[name=lastName]').type(formData.lastName);
  cy.get('input[name=email]').type(formData.email);
  cy.get('button[type=submit]').click();
});

용법:

// cypress/integration/form.spec.js
describe('Form Tests', () => {
  it('Should submit the form with valid data', () => {
    const formData = {
      firstName: 'John',
      lastName: 'Doe',
      email: '[email protected]'
    };
    cy.fillForm(formData);
    cy.get('.success-message').should('be.visible');
  });
});

삼. 체인 명령
사용자 지정 명령이 cy.wrap()을 사용하여 Cypress 체인 가능 항목을 반환하도록 하여 연결을 활성화하고 Cypress 명령의 흐름을 유지합니다.

예:

// cypress/support/commands.js
Cypress.Commands.add('selectDropdown', (selector, value) => {
  cy.get(selector).select(value).should('have.value', value);
  return cy.wrap(value);
});

용법:

// cypress/integration/dropdown.spec.js
describe('Dropdown Tests', () => {
  it('Should select a value from the dropdown', () => {
    cy.visit('/dropdown-page');
    cy.selectDropdown('#dropdown', 'Option 1').then((value) => {
      expect(value).to.equal('Option 1');
    });
  });
});

4. 문서 명령
사용자 정의 명령에 설명을 추가하여 목적과 사용법을 설명합니다. 이는 다른 개발자가 코드를 이해하고 올바르게 사용하는 데 도움이 됩니다.

예:

// cypress/support/commands.js

/**
 * Custom command to login to the application
 * @param {string} email - User email
 * @param {string} password - User password
 */
Cypress.Commands.add('login', (email, password) => {
  cy.visit('/login');
  cy.get('input[name=email]').type(email);
  cy.get('input[name=password]').type(password);
  cy.get('button[type=submit]').click();
});

5. 공통 작업 모듈화
재사용을 촉진하고 중복을 줄이기 위해 사용자 정의 명령 내에 공통 작업을 캡슐화합니다. 또한 복잡한 상호 작용을 추상화하여 테스트를 더 읽기 쉽게 만듭니다.

예:

// cypress/support/commands.js
Cypress.Commands.add('addItemToCart', (itemName) => {
  cy.get('.product-list').contains(itemName).click();
  cy.get('.add-to-cart').click();
});

용법:

// cypress/integration/cart.spec.js
describe('Cart Tests', () => {
  it('Should add an item to the cart', () => {
    cy.visit('/shop');
    cy.addItemToCart('Laptop');
    cy.get('.cart-items').should('contain', 'Laptop');
  });
});

결론

이러한 모범 사례를 따르면 Cypress에서 강력할 뿐만 아니라 유지 관리가 가능하고 이해하기 쉬운 사용자 지정 명령을 만들 수 있습니다. 명확한 이름 지정, 매개변수화, 연결, 문서화 및 모듈화는 효과적인 사용자 정의 명령을 작성하는 데 핵심입니다. 테스트 자동화 프레임워크에 이러한 사례를 구현하여 테스트 품질과 효율성을 향상하세요.

지금 바로 사용자 지정 명령을 개선하고 Cypress 테스트를 한 단계 더 발전시켜 보세요. 즐거운 테스트 되세요!

릴리스 선언문 이 기사는 https://dev.to/aswani25/best-practices-for-custom-commands-in-cypress-a-detailed-guide-cl2?1에 복제되어 있습니다. 침해가 있는 경우에는 Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3