Heim > Web-Frontend > js-Tutorial > Komplettes Redux-Toolkit (Teil -5)

Komplettes Redux-Toolkit (Teil -5)

DDD
Freigeben: 2024-09-12 20:16:05
Original
1154 Leute haben es durchsucht

Complete redux toolkit (Part -5)

Hier ist der Entwurf für Teil 5: Teststrategien für Redux Toolkit und RTK-Abfrage. In diesem Teil werden die Best Practices zum Testen von Redux Toolkit und RTK Query behandelt, wobei der Schwerpunkt auf Unit-Tests, Integrationstests und der Sicherstellung liegt, dass Ihr Code robust und wartbar ist.


Teil 5: Teststrategien für Redux Toolkit und RTK-Abfrage

1. Bedeutung des Testens in Redux-Anwendungen

Testen ist ein entscheidender Aspekt jedes Anwendungsentwicklungsprozesses. Es stellt sicher, dass sich Ihre Anwendung wie erwartet verhält, hilft dabei, Fehler frühzeitig zu erkennen und sorgt für Sicherheit bei der Durchführung von Änderungen. Mit Redux Toolkit (RTK) und RTK Query werden Tests aufgrund der vereinfachten APIs und der reduzierten Boilerplate einfacher zu verwalten. In diesem Teil werden wir verschiedene Teststrategien untersuchen, um sicherzustellen, dass Redux-Anwendungen zuverlässig und wartbar sind.

2. Einrichten einer Testumgebung

Bevor Sie sich mit spezifischen Teststrategien befassen, stellen Sie sicher, dass Sie eine geeignete Testumgebung eingerichtet haben. Für ein typisches React Redux Toolkit-Projekt können Sie Tools verwenden wie:

  • Jest: Ein beliebtes Test-Framework für JavaScript.
  • React Testing Library (RTL): Eine leichte Lösung zum Testen von React-Komponenten.
  • MSW (Mock Service Worker): Eine Bibliothek zum Verspotten von API-Anfragen während des Testens.

Um diese Bibliotheken zu installieren, führen Sie Folgendes aus:

npm install --save-dev jest @testing-library/react @testing-library/jest-dom msw
Nach dem Login kopieren

3. Unit-Testing von Redux-Slices

Redux-Slices sind der Kern der Zustandsverwaltung im Redux Toolkit. Durch Unit-Tests dieser Slices wird sichergestellt, dass Reduzierer und Aktionen ordnungsgemäß funktionieren.

Schritt 1: Reduzierer testen

Betrachten Sie die folgenden BeiträgeSlice.js:

// src/features/posts/postsSlice.js
import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  posts: [],
  status: 'idle',
  error: null,
};

const postsSlice = createSlice({
  name: 'posts',
  initialState,
  reducers: {
    addPost: (state, action) => {
      state.posts.push(action.payload);
    },
    removePost: (state, action) => {
      state.posts = state.posts.filter(post => post.id !== action.payload);
    },
  },
});

export const { addPost, removePost } = postsSlice.actions;
export default postsSlice.reducer;
Nach dem Login kopieren

Unit-Tests für BeiträgeSlice-Reduzierer:

// src/features/posts/postsSlice.test.js
import postsReducer, { addPost, removePost } from './postsSlice';

describe('postsSlice reducer', () => {
  const initialState = { posts: [], status: 'idle', error: null };

  it('should handle initial state', () => {
    expect(postsReducer(undefined, {})).toEqual(initialState);
  });

  it('should handle addPost', () => {
    const newPost = { id: 1, title: 'New Post' };
    const expectedState = { ...initialState, posts: [newPost] };

    expect(postsReducer(initialState, addPost(newPost))).toEqual(expectedState);
  });

  it('should handle removePost', () => {
    const initialStateWithPosts = { ...initialState, posts: [{ id: 1, title: 'New Post' }] };
    const expectedState = { ...initialState, posts: [] };

    expect(postsReducer(initialStateWithPosts, removePost(1))).toEqual(expectedState);
  });
});
Nach dem Login kopieren

Erklärung:

  • Anfangszustandstest: Überprüft, ob der Reduzierer den korrekten Anfangszustand zurückgibt.
  • Aktionstests: Testet die Aktionen „addPost“ und „removePost“, um sicherzustellen, dass sie den Status korrekt ändern.

4. Testen von RTK-Abfrage-API-Slices

RTK Query vereinfacht die API-Integration, aber das Testen dieser API-Slices unterscheidet sich geringfügig vom Testen normaler Slices. Sie müssen API-Anfragen simulieren und überprüfen, wie das Slice diese Anfragen verarbeitet.

Schritt 1: Einrichten von MSW für Mocking-API-Anfragen

Erstellen Sie eine setupTests.js-Datei, um MSW zu konfigurieren:

// src/setupTests.js
import { setupServer } from 'msw/node';
import { rest } from 'msw';

const server = setupServer(
  // Mocking GET /posts endpoint
  rest.get('https://jsonplaceholder.typicode.com/posts', (req, res, ctx) => {
    return res(ctx.json([{ id: 1, title: 'Mock Post' }]));
  }),
  // Mocking POST /posts endpoint
  rest.post('https://jsonplaceholder.typicode.com/posts', (req, res, ctx) => {
    return res(ctx.json({ id: 2, ...req.body }));
  })
);

// Establish API mocking before all tests
beforeAll(() => server.listen());
// Reset any request handlers that are declared as a part of our tests (i.e. for testing one-time errors)
afterEach(() => server.resetHandlers());
// Clean up after the tests are finished
afterAll(() => server.close());
Nach dem Login kopieren

Schritt 2: Schreiben von Tests für RTK-Abfrageendpunkte

Testen der fetchPosts-Abfrage von postsApi.js:

// src/features/posts/postsApi.test.js
import { renderHook } from '@testing-library/react-hooks';
import { Provider } from 'react-redux';
import { setupApiStore } from '../../testUtils';
import { postsApi, useFetchPostsQuery } from './postsApi';
import store from '../../app/store';

describe('RTK Query: postsApi', () => {
  it('fetches posts successfully', async () => {
    const { result, waitForNextUpdate } = renderHook(() => useFetchPostsQuery(), {
      wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
    });

    await waitForNextUpdate();

    expect(result.current.data).toEqual([{ id: 1, title: 'Mock Post' }]);
    expect(result.current.isLoading).toBeFalsy();
  });
});
Nach dem Login kopieren

Erklärung:

  • MSW-Setup: setupServer konfiguriert MSW, um API-Endpunkte zu simulieren.
  • Render Hook: Das Dienstprogramm renderHook aus der React Testing Library wird zum Testen benutzerdefinierter Hooks wie useFetchPostsQuery verwendet.
  • Verspottete API-Antwort: Validiert das Verhalten des Hooks mit simulierten API-Antworten.

5. Integrationstests von Redux mit Komponenten

Integrationstests konzentrieren sich darauf, zu testen, wie verschiedene Teile zusammenarbeiten. In Redux-Anwendungen bedeutet dies häufig das Testen von Komponenten, die mit dem Redux-Store interagieren.

Schritt 1: Integrationstests mit der React Testing Library schreiben

Integrationstest für die PostsList-Komponente:

// src/features/posts/PostsList.test.js
import React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import { Provider } from 'react-redux';
import store from '../../app/store';
import PostsList from './PostsList';

test('renders posts fetched from the API', async () => {
  render(
    <Provider store={store}>
      <PostsList />
    </Provider>
  );

  expect(screen.getByText(/Loading.../i)).toBeInTheDocument();

  // Wait for posts to be fetched and rendered
  await waitFor(() => {
    expect(screen.getByText(/Mock Post/i)).toBeInTheDocument();
  });
});
Nach dem Login kopieren

Erklärung:

  • Ladezustandstest: Überprüft, ob die Ladeanzeige zunächst angezeigt wird.
  • Daten-Rendering-Test: Wartet auf den Abruf der Beiträge und stellt sicher, dass sie korrekt gerendert werden.

6. Best Practices zum Testen von Redux Toolkit und RTK Query

  • Verwenden Sie MSW für API-Mocking: MSW ist ein leistungsstarkes Tool zum Mocking von Netzwerkanfragen und zur Simulation verschiedener Szenarien, wie z. B. Netzwerkfehler oder langsame Antworten.
  • Reduzierer isoliert testen: Reduzierertests sind reine Funktionen und sollten separat getestet werden, um sicherzustellen, dass sie Aktionen korrekt verarbeiten.
  • Hooks isoliert testen: Verwenden Sie renderHook aus der React Testing Library, um Hooks unabhängig von UI-Komponenten zu testen.
  • Verwenden Sie setupApiStore für API-Slice-Tests: Verwenden Sie beim Testen von RTK-Abfrageendpunkten setupApiStore, um den Redux-Store mit API-Slices zu simulieren.
  • Konzentrieren Sie sich auf Integrationstests für Komponenten: Kombinieren Sie Slice- und Komponententests für Integrationstests, um sicherzustellen, dass sie korrekt zusammenarbeiten.
  • Abdeckung für Randfälle sicherstellen: Testen Sie Randfälle wie API-Fehler, leere Zustände und ungültige Daten, um Robustheit sicherzustellen.

7. Fazit

In diesem Teil haben wir verschiedene Teststrategien für Redux Toolkit und RTK Query behandelt, darunter Unit-Tests von Reduzierern und Slices, das Testen von RTK Query API-Slices mit MSW und das Schreiben von Integrationstests für Komponenten, die mit dem Redux-Store interagieren. Durch Befolgen dieser Best Practices können Sie sicherstellen, dass Ihre Redux-Anwendungen robust, zuverlässig und wartbar sind.

Damit ist unsere Serie über Redux Toolkit und RTK Query abgeschlossen! Ich hoffe, diese Teile haben Ihnen geholfen, Redux Toolkit von den Grundlagen bis hin zu fortgeschrittenen Themen, einschließlich effektiver Teststrategien, zu verstehen.

Viel Spaß beim Codieren und testen Sie weiter, um sicherzustellen, dass Ihre Apps immer in Topform sind!

Das obige ist der detaillierte Inhalt vonKomplettes Redux-Toolkit (Teil -5). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage