În orice aplicație serioasă – fie ea un blog, un magazin online sau un dashboard enterprise – testele automate nu mai sunt un „lux”, ci o necesitate. Ele oferă încredere în cod, ușurează refactorizările și accelerează livrarea de funcționalitate. În acest articol vei învăța cum să testezi aplicația ta React + .NET Core pe toate nivelurile: domeniu, aplicație, API și frontend.
✅ 1. Testarea logicii de domeniu (xUnit/NUnit)
Începem cu cea mai pură zonă a codului: modelul de domeniu (Domain Layer), unde se află regulile de business.
Exemplu: Agregatul Post
public class Post
{
public Guid Id { get; private set; }
public Slug Slug { get; private set; }
public PostContent Content { get; private set; }
public Post(Slug slug, PostContent content)
{
Id = Guid.NewGuid();
Slug = slug;
Content = content;
}
}
public class PostTests
{
[Fact]
public void Constructor_Should_SetSlugAndContent()
{
// Arrange
var slug = new Slug("primul-post");
var content = new PostContent("Salut lume!");
// Act
var post = new Post(slug, content);
// Assert
Assert.Equal(slug, post.Slug);
Assert.Equal(content, post.Content);
}
}
✅ Bonus: Folosește FluentAssertions pentru assert-uri expresive.
✅ 2. Testarea serviciilor de aplicație
Application Layer conține logica de orchestrare. Aici lucrăm cu comenzi, query-uri și handleri (dacă folosești MediatR).
Exemplu: CreatePostCommandHandler
public class CreatePostCommandHandler : IRequestHandler<CreatePostCommand, Guid>
{
public Task<Guid> Handle(CreatePostCommand request, CancellationToken cancellationToken)
{
// Creează un nou post, salvează în repo etc.
}
}
[Fact]
public async Task Handle_ShouldReturnPostId_WhenPostIsCreated()
{
// Arrange
var command = new CreatePostCommand("titlu", "continut");
var handler = new CreatePostCommandHandler(/* mocks */);
// Act
var result = await handler.Handle(command, CancellationToken.None);
// Assert
result.Should().NotBeEmpty();
}
✅ Tool-uri utile:
✅ 3. Testarea controllerelor (integration tests)
Cu WebApplicationFactory putem scrie teste care pornesc aplicația ca într-un mediu real, dar cu DB in-memory (SQLite sau UseInMemoryDatabase()).
Setup
public class CustomWebAppFactory : WebApplicationFactory<Program>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
services.RemoveAll(typeof(DbContextOptions<AppDbContext>));
services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase("TestDb"));
});
}
}
[Fact]
public async Task GetPosts_ShouldReturn200()
{
var client = _factory.CreateClient();
var response = await client.GetAsync("/api/posts");
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
✅ 4. Testarea componentelor React (Vitest + React Testing Library)
Pe frontend, folosim Vitest (vite-native) împreună cu @testing-library/react.
Exemplu: PostList
export function PostList({ posts }: { posts: Post[] }) {
return (
<ul>
{posts.map(p => <li key={p.id}>{p.title}</li>)}
</ul>
);
}
import { render, screen } from "@testing-library/react";
import { PostList } from "./PostList";
test("renders post titles", () => {
render(<PostList posts={[{ id: "1", title: "Salut!" }]} />);
expect(screen.getByText("Salut!")).toBeInTheDocument();
});
✅ Bonus: Folosește msw (Mock Service Worker) pentru a intercepta request-uri API în teste.
Concluzie
Acum ai o imagine completă a testării într-o aplicație React + .NET:
-
🧠 Unit tests pentru modelul de domeniu
-
🧩 Teste de aplicație pentru handleri și servicii
-
🌐 Integration tests pentru API
-
🎯 UI tests pentru React
Recomandare: Include testele în CI/CD (GitHub Actions) pentru verificări automate la fiecare commit.