برای تست من از xUnit استفاده میکنم.
ابتدا این پروژه را دانلود کنید.
اول پروژه Blazor Web Assembly و xUnit می سازیم.
سپس پروژه ای که دانلود کردیم رو با استفاده از add existing project به solution خودمون اضافه میکنم.
و بعد رفرنس Server را و پروژه ای که اضافه کردیم را اضافه میکنم:
نکته: چون server درون خودش به Client و Shared رفرنس دارد نیازی به تیک زدن آن پروژه ها نیست.
نکته: مطمئن بشید که تمام NuGet پکیج ها کامل دانلود شده باشند.
خوب آماده سازی Solution تمام شد!
کلاس TestHost: کار این کلاس رندر کردن کامپوننت های Blazor هست.
using System; using Xunit; namespace DevOpsBlazor.UnitTests { public class IndexPageUnitTests { TestHost host = new TestHost(); [Fact] public void ShouldRenderHello() { var component = host.AddComponent<Web.Client.Pages.Index>(); // Assert h1 Assert.Equal("Hello, world!", component.Find("h1").InnerText); // Assert text in the body Assert.Contains("Welcome to your new app.", component.GetMarkup()); // Assert if survey component exists Assert.NotNull(component.Find(".alert.alert-secondary")); // Assert the link Assert.Equal( "https://go.microsoft.com/fwlink/?linkid=2127996", component.Find("a").Attributes["href"].Value); } } }
کامپوننت SurveyPrompt که در Index Component به کار رفته ، دارای یک Parameter می باشد (با نام Title) برای همین باید جدا تست کنیم.
using Microsoft.AspNetCore.Components.Testing; using System; using System.Collections.Generic; using System.Text; using Xunit; namespace DevOpsBlazor.UnitTests { public class SurveyPromptUnitTests { TestHost host = new TestHost(); [Fact] public void ShouldRenderTitle() { var title = "Test" var parameters = new Dictionary<string, object>() { { "Title", title } }; var component = host.AddComponent<SurveyPrompt>(parameters); Assert.Equal(title, component.Find("strong").InnerText); } } }
همانطور که در کد بالا می بینید ما پارامتر رو به کامپوننت پاس دادیم. نتیجه آن:
تمام.
این هم یک Cheat sheet مانند از xUnit
و در نهایت منبع
هدف من از این آموزش آماده سازی solution بود. اگر می خواهید تست ها پیچیده تر بنویسید مثلا استفاده از Private method ها ، استفاده از Dependency Injection و ... قسمت دوم آموزش و قسمت های بعد از آن را حتما ببینید.