Sobes.tech
Junior

Խոսեք ձեր փորձի մասին ծրագրերում թեստավորման հետ։

sobes.tech AI

Պատասխան AI-ից

Իմ նախագծերում ես օգտագործել եմ տարբեր տեսակի թեստավորումներ՝ ապահովելու համար ֆրոնտենդի որակը:

  1. Միավորային թեստավորում: Օգտագործելով Jest և React Testing Library՝ առանձին կոմպոնենտների, ֆունկցիաների և մոդուլների մեկուսացման և ստուգման համար։ Դա օգնում է արագ հայտնաբերել տրամաբանական սխալները փոքր, անկախ մասերում:

    // Օրինակ միավորային թեստ Button կոմպոնենտի համար Jest և React Testing Library-ով
    import { render, screen } from '@testing-library/react';
    import Button from './Button';
    
    test('կատարվում է ճիշտ տեքստով կոճակ', () => {
      render(<Button>Click Me</Button>);
      const buttonElement = screen.getByText(/Click Me/i);
      expect(buttonElement).toBeInTheDocument();
    });
    
  2. Ինտեգրացիոն թեստավորում: Մի քանի կոմպոնենտների կամ մոդուլների փոխազդեցության ստուգում։ Դա ապահովում է, որ տարբեր մասերը ճիշտ աշխատեն միասին։ Ես նաև օգտագործել եմ React Testing Library:

    // Օրինակ ֆորմայի և ուղարկման կոճակի ինտեգրացիոն թեստ
    import { render, screen, fireEvent } from '@testing-library/react';
    import Form from './Form';
    
    test('ֆորմայի ուղարկումը կանչում է onSubmit-ը ճիշտ տվյալներով', () => {
      const mockSubmit = jest.fn();
      render(<Form onSubmit={mockSubmit} />);
    
      const input = screen.getByLabelText(/Username:/i);
      const submitButton = screen.getByRole('button', { name: /Submit/i });
    
      fireEvent.change(input, { target: { value: 'testuser' } });
      fireEvent.click(submitButton);
    
      expect(mockSubmit).toHaveBeenCalledWith({ username: 'testuser' });
    });
    
  3. E2E թեստավորում: Որոշ նախագծերում ես օգտագործել եմ Cypress կամ Playwright՝ օգտագործողի սցենարների ամբողջական թեստավորման համար իրական բրաուզերում։ Դա օգնում է ստուգել, որ ամբողջ ծրագիրը աշխատում է այնպես, ինչպես սպասվում է վերջնական օգտատիրոջ համար:

    // Cypress-ով E2E թեստի օրինակ
    // cypress/integration/todo.spec.js
    describe('Todo հավելված', () => {
      it('պետք է ավելացնի նոր գործառույթ', () => {
        cy.visit('/'); // Դիտել հավելվածի էջը
    
        cy.get('.new-todo').type('Buy milk{enter}'); // Տեքստի մուտքագրում և Enter սեղմում
    
        cy.get('.todo-list li')
          .should('have.length', 1) // Էլեմենտների քանակի ստուգում
          .first()
          .should('have.text', 'Buy milk'); // Առաջին էլեմենտի տեքստի ստուգում
      });
    });
    
  4. Սկիզբային (Snapshot) թեստավորում: Jest-ով՝ կոմպոնենտի կառուցվածքը ֆիքսելու և անսպասելի փոփոխությունները հայտնաբերելու համար (օրինակ՝ ռեֆակտորինգից հետո):

    // Snapshot թեստ Card կոմպոնենտի համար Jest-ով
    import renderer from 'react-test-renderer';
    import Card from './Card';
    
    test('Card-ը ճիշտ է ցուցադրվում', () => {
      const tree = renderer
        .create(<Card title="Test Title">Test Content</Card>)
        .toJSON();
      expect(tree).toMatchSnapshot(); // Համեմատում պահած snapshot-ի հետ
    });
    

Ես կարծում եմ, որ թեստավորումը կարևոր մասն է զարգացման գործընթացի, քանի որ այն օգնում է պահպանել կոդի որակը, հեշտացնում է ռեֆակտորինգը և նվազեցնում է սխալների հավանականությունը արտադրությունում։ Թեստերը հաճախ գրում եմ նոր ֆունկցիաների զարգացմամբ կամ սխալների շտկումից առաջ (TDD մոտեցում, որտեղ դա կիրառելի է):