-
-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1346cca
commit b68ce3c
Showing
3 changed files
with
150 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
--- | ||
title: قراردادهای نامگذاری | ||
description: مروری بر قوانین نامگذاری توصیه شده هنگام استفاده از بلوک. | ||
--- | ||
|
||
import EventExamplesGood1 from '~/components/naming-conventions/EventExamplesGood1Snippet.astro'; | ||
import EventExamplesBad1 from '~/components/naming-conventions/EventExamplesBad1Snippet.astro'; | ||
import StateExamplesGood1Snippet from '~/components/naming-conventions/StateExamplesGood1Snippet.astro'; | ||
import SingleStateExamplesGood1Snippet from '~/components/naming-conventions/SingleStateExamplesGood1Snippet.astro'; | ||
import StateExamplesBad1Snippet from '~/components/naming-conventions/StateExamplesBad1Snippet.astro'; | ||
|
||
قراردادهای نامگذاری زیر صرفاً توصیه شده و کاملاً اختیاری هستند. با خیال راحت از هر گونه قرارداد نامگذاری که ترجیح می دهید استفاده کنید. ممکن است دریابید که برخی از مثالها/اسناد اصولاً به دلیل سادگی/مختصر بودن از قراردادهای نامگذاری پیروی نمیکنند. این قرارداد ها به شدت برای پروژه های بزرگ با توسعه دهندگان متعدد توصیه می شود. | ||
|
||
## قراردادهای کلاس رویداد | ||
|
||
رویدادها باید با **گذشته ساده** نامگذاری شوند، زیرا رویدادها چیزهایی هستند که از دیدگاه Bloc قبلاً اتفاق افتاده اند. | ||
|
||
### ساختار | ||
|
||
`BlocSubject` + `Noun (optional)` + `Verb (event)` | ||
|
||
رویدادهای لود اولیه باید این قرارداد را دنبال کنند: `BlocSubject` + `Started` | ||
|
||
:::note | ||
کلاس های رویداد پایه باید این نامگذاری را داشته باشند: `BlocSubject` + `Event`. | ||
::: | ||
|
||
### مثال ها | ||
|
||
✅ **خوب** | ||
|
||
<EventExamplesGood1 /> | ||
|
||
❌ **بد** | ||
|
||
<EventExamplesBad1 /> | ||
|
||
## قراردادهای کلاس وضعیت | ||
|
||
وضعیتها باید اسم باشند، چرا که یک وضعیت فقط یک لحظهی خاص در زمان را نمایان میکند. دو روش رایج برای نمایش وضعیت وجود دارد: استفاده از زیرکلاسها (Subclasses) یا استفاده از یک کلاس تکی (Single class). | ||
|
||
### ساختار | ||
|
||
#### زیرکلاسها | ||
|
||
`BlocSubject` + `Verb (action)` + `State` | ||
|
||
هنگام نمایش وضعیت به عنوان چندین زیرکلاس، `State` باید یکی از موارد زیر را دارا باشد: | ||
|
||
`Initial` | `Success` | `Failure` | `InProgress` | ||
|
||
:::note | ||
وضعیتهای اولیه باید طبق این قرار داد عمل کنند: `BlocSubject` + `Initial`. | ||
::: | ||
|
||
#### کلاس تکی | ||
|
||
`BlocSubject` + `State` | ||
|
||
هنگام نمایش وضعیت به عنوان یک کلاس پایه تکی، باید از یک enum با نام `BlocSubject` + `Status` برای نمایش وضعیتهای مختلف استفاده شود: | ||
|
||
`initial` | `success` | `failure` | `loading`. | ||
|
||
:::note | ||
کلاس وضعیت پایه همیشه باید به این روش نام گذاری شوند: `BlocSubject` + `State`. | ||
::: | ||
|
||
### مثال ها | ||
|
||
✅ **خوب** | ||
|
||
##### زیرکلاسها | ||
|
||
<StateExamplesGood1Snippet /> | ||
|
||
##### کلاس تکی | ||
|
||
<SingleStateExamplesGood1Snippet /> | ||
|
||
❌ **بد** | ||
|
||
<StateExamplesBad1Snippet /> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
--- | ||
title: آزمایش کردن (Testing) | ||
description: اصول اولیه نحوه نوشتن تست برای بلوک های خود. | ||
--- | ||
|
||
import CounterBlocSnippet from '~/components/testing/CounterBlocSnippet.astro'; | ||
import AddDevDependenciesSnippet from '~/components/testing/AddDevDependenciesSnippet.astro'; | ||
import CounterBlocTestImportsSnippet from '~/components/testing/CounterBlocTestImportsSnippet.astro'; | ||
import CounterBlocTestMainSnippet from '~/components/testing/CounterBlocTestMainSnippet.astro'; | ||
import CounterBlocTestSetupSnippet from '~/components/testing/CounterBlocTestSetupSnippet.astro'; | ||
import CounterBlocTestInitialStateSnippet from '~/components/testing/CounterBlocTestInitialStateSnippet.astro'; | ||
import CounterBlocTestBlocTestSnippet from '~/components/testing/CounterBlocTestBlocTestSnippet.astro'; | ||
|
||
Bloc به گونه ای طراحی شده است که آزمایش آن بسیار آسان باشد.در این بخش، نحوه تست واحد (Unit Test) یک بلوک را توضیح خواهیم داد. | ||
|
||
به خاطر سادگی، بیایید تست ها را برای `CounterBloc` که در [مفاهیم اصلی](/fa/bloc-concepts) ایجاد کردیم بنویسیم. | ||
|
||
برای خلاصهی مطلب، پیادهسازی `CounterBloc` به شکل زیر است: | ||
|
||
<CounterBlocSnippet /> | ||
|
||
## راه اندازی (Setup) | ||
|
||
قبل از شروع نوشتن تست های خود، باید یک چارچوب آزمایشی (Testing Framework) را به وابستگی های خود اضافه کنیم. | ||
|
||
ما باید [test](https://pub.dev/packages/test) و [bloc_test](https://pub.dev/packages/bloc_test) را به پروژه خود اضافه کنیم. | ||
|
||
<AddDevDependenciesSnippet /> | ||
|
||
## آزمایش کردن | ||
|
||
بیایید با ایجاد فایل تست برای `CounterBloc`، به نام `counter_bloc_test.dart`، شروع کنیم و بسته تست را وارد کنیم. | ||
|
||
<CounterBlocTestImportsSnippet /> | ||
|
||
بعداز آن، باید `main` و گروه تست خود را ایجاد کنیم. | ||
|
||
<CounterBlocTestMainSnippet /> | ||
|
||
:::note | ||
گروهها برای سازماندهی تستهای فردی (Individual) و همچنین برای ایجاد یک محیط (Context) که در آن میتوانید یک `setUp` و `tearDown` مشترک را در تمام تستهای فردی به اشتراک بگذارید، استفاده میشوند. | ||
::: | ||
|
||
بیایید با ایجاد نمونهای از `CounterBloc` خود که در تمامی تستهایمان استفاده خواهد شد، شروع کنیم. | ||
|
||
<CounterBlocTestSetupSnippet /> | ||
|
||
حالا میتوانیم شروع به نوشتن تستهای فردی خود کنیم. | ||
|
||
<CounterBlocTestInitialStateSnippet /> | ||
|
||
:::note | ||
میتوانیم تمامی تستهای خود را با استفاده از دستور `pub run test` اجرا کنیم. | ||
::: | ||
|
||
در این نقطه باید تست اولیه ما را پاس کرده باشیم! حالا بیایید یک تست پیچیدهتر را با استفاده از بسته [bloc_test](https://pub.dev/packages/bloc_test) بنویسیم. | ||
|
||
<CounterBlocTestBlocTestSnippet /> | ||
|
||
باید بتوانیم تستها را اجرا کنیم و ببینیم که همه آنها پاس میشوند. | ||
|
||
این تمام چیزی است که در آن وجود دارد، آزمایش باید سریع باشد و ما باید هنگام ایجاد تغییرات و بازسازی کد خود احساس اطمینان کنیم. | ||
|
||
شما میتوانید به برنامه [Weather App](https://github.com/felangel/bloc/tree/master/examples/flutter_weather) مراجعه کنید تا یک مثال از یک برنامه کاملاً تست شده را ببینید. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters