1
00:00:02,939 --> 00:00:07,179
اسمحوا لي أن أتحدث لكم بإيجاز عن الاختبار الزاوي.

2
00:00:07,179 --> 00:00:11,125
كيف يمكنك تصميم تطبيقاتك الزاويّة لتكون قابلة للاختبار؟

3
00:00:11,125 --> 00:00:14,032
كيف يمكنك تصميم الاختبارات للتطبيق الزاوي الخاص بك؟

4
00:00:14,032 --> 00:00:16,359
كيف تقوم بتنفيذ الاختبارات والتأكد من أن

5
00:00:16,359 --> 00:00:20,607
تطبيقك الزاوي يرضي جميع الاختبارات التي

6
00:00:20,607 --> 00:00:25,210
كتبتها حتى أثناء تطوير تطبيقك الزاوي؟

7
00:00:25,210 --> 00:00:27,394
الآن هذا هو المكان الذي أود أيضا أن أتحدث بإيجاز عن

8
00:00:27,394 --> 00:00:31,209
تطوير اختبار مدفوعة من التطبيقات الزاوي.

9
00:00:31,209 --> 00:00:37,225
ومن المثير للاهتمام، تم بناء الزاوي نفسه من الألف إلى الأعلى لتمكين الاختبار،

10
00:00:37,225 --> 00:00:40,820
لتكون جزءًا من تطوير التطبيق الزاوي الخاص بك.

11
00:00:40,820 --> 00:00:47,844
القوة الرئيسية وراء الزاوي ميسكو هيفري كان نفسه مهندس اختبار جوجل، وبالتالي،

12
00:00:47,844 --> 00:00:51,850
تأثيره على تصميم الزاوي لتكون قابلة للاختبار من الألف

13
00:00:51,850 --> 00:00:56,479
إلى الأعلى يمكن بسهولة أن ينظر إليه في جميع أنحاء الإطار.

14
00:00:56,479 --> 00:01:04,435
لذلك، الزاوي نفسه كما كنت قد فهمت من المحاضرات والتمارين السابقة،

15
00:01:04,435 --> 00:01:07,224
هو وحدات في الطبيعة.

16
00:01:07,224 --> 00:01:11,155
وبالتالي فإن وحدات الزاوي جنبا إلى جنب مع المكونات

17
00:01:11,155 --> 00:01:17,409
وقوالب ومن ثم الخدمات والأنابيب والتوجيهات،

18
00:01:17,409 --> 00:01:23,559
يعني أن الزاوي يفسح المجال بسهولة ليتم اختبارها.

19
00:01:23,559 --> 00:01:29,049
الآن، لأن التطبيق الزاوي نفسه يتكون من هذه الأجزاء المختلفة،

20
00:01:29,049 --> 00:01:32,319
يمكنك اختبار كل من تلك الأجزاء في عزلة أولا

21
00:01:32,319 --> 00:01:36,719
حتى قبل أن تصبح جزءا من التطبيق الزاوي بأكمله.

22
00:01:36,719 --> 00:01:45,969
الجانب الثاني هو آلية حقن التبعية التي

23
00:01:45,969 --> 00:01:52,120
تعني الروافع الزاوي لدعم الجمع بين الأجزاء المختلفة من التطبيق الزاوي الخاص بك نفسه أنه يمكنك بسهولة استبدال السخرية

24
00:01:52,120 --> 00:01:54,340
لتلك التبعيات داخل

25
00:01:54,340 --> 00:01:59,165
الأجزاء المختلفة من التطبيق الزاوي و إجراء الاختبارات.

26
00:01:59,165 --> 00:02:01,135
لقد استخدمت كلمة وهمية في,

27
00:02:01,135 --> 00:02:05,409
في الجملة السابقة سوف تأتي إلى فهم

28
00:02:05,409 --> 00:02:10,194
أنه في مزيد من التفاصيل قليلا وأكثر من ذلك, الشرائح في وقت لاحق.

29
00:02:10,194 --> 00:02:14,439
هذا هو المكان الذي نحتاج فيه إلى أن نكون

30
00:02:14,439 --> 00:02:19,724
على دراية بنهج للقيام بتطوير التطبيقات يسمى التطوير القائم على الاختبار.

31
00:02:19,724 --> 00:02:26,155
في التطوير المستند إلى الاختبار، كما يمكنك فهمه بالاسم نفسه،

32
00:02:26,155 --> 00:02:29,229
يعني أنك تكتب أولاً اختبارات آلية

33
00:02:29,229 --> 00:02:33,389
لجميع الوظائف التي ترغب في تنفيذها داخل التطبيق الخاص بك.

34
00:02:33,389 --> 00:02:35,004
لذلك يأتي الاختبار أولاً،

35
00:02:35,004 --> 00:02:39,180
وبعد ذلك تكتب رمز التطبيق الخاص بك من أجل اجتياز الاختبار.

36
00:02:39,180 --> 00:02:44,634
لذلك يحدد الاختبار نفسه الوظائف التي تريد تنفيذها.

37
00:02:44,634 --> 00:02:47,840
بعد ذلك تكتب التعليمات البرمجية لتنفيذ هذه الوظيفة.

38
00:02:47,840 --> 00:02:50,165
نظرًا لأن لديك الاختبار بالفعل،

39
00:02:50,165 --> 00:02:58,150
يمكنك اختبار لمعرفة ما إذا كان التنفيذ الذي تقوم به يفي بالاختبار أم لا.

40
00:02:58,150 --> 00:03:04,735
الآن، بالطبع، بمجرد أن يفي إدراكك لوظائفك بالاختبار،

41
00:03:04,735 --> 00:03:10,919
يمكنك دائمًا إعادة صياغة الشفرة للامتثال لمعايير هندسة البرمجيات الخاصة بهم.

42
00:03:10,919 --> 00:03:12,939
ولكن حتى بعد ذلك،

43
00:03:12,939 --> 00:03:16,900
يمكنك إعادة اختبار التعليمات البرمجية للتأكد من أنها لا تزال تلبي

44
00:03:16,900 --> 00:03:20,844
تلك المتطلبات المحددة في

45
00:03:20,844 --> 00:03:25,914
هذا الاختبار المحدد الذي تستخدمه في التطوير الذي يحركه الاختبار.

46
00:03:25,914 --> 00:03:28,659
لذا في الواقع، فإن التطوير القائم على الاختبار هو

47
00:03:28,659 --> 00:03:32,199
نهج قابل للتطبيق للغاية لتصميم

48
00:03:32,199 --> 00:03:36,522
تطبيق جيد من الألف إلى الياء ليتم اختباره بشكل كامل.

49
00:03:36,522 --> 00:03:38,340
الآن عندما نتحدث عن الاختبار،

50
00:03:38,340 --> 00:03:42,009
يمكنك الاقتراب من الاختبار من عدة جوانب مختلفة.

51
00:03:42,009 --> 00:03:44,889
أولاً وقبل كل شيء هو أنه إذا تم

52
00:03:44,889 --> 00:03:48,534
تنفيذ التطبيق الخاص بك نفسه كقطع مختلفة،

53
00:03:48,534 --> 00:03:52,620
مثل المكونات، مثل الخدمات، مثل التوجيهات،

54
00:03:52,620 --> 00:03:57,760
مثل الأنابيب التي تقوم بتنفيذها داخل التطبيق الخاص بك.

55
00:03:57,760 --> 00:04:03,120
وهذا يعني أنه يمكنك بسهولة اختبار كل من هذه الوحدات الفردية في عزلة.

56
00:04:03,120 --> 00:04:06,435
لذلك هذا هو المكان الذي تأتي فيه اختبارات الوحدة إلى الواجهة.

57
00:04:06,435 --> 00:04:10,675
اختبار الوحدة يعني أنك تختبر الوحدات الفردية من التعليمات البرمجية،

58
00:04:10,675 --> 00:04:13,750
والتأكد من أن هذه الوحدة الفردية المعينة

59
00:04:13,750 --> 00:04:18,759
تلبي الوظائف التي من المفترض

60
00:04:18,759 --> 00:04:25,855
أن تدعمها، ويتم تنفيذ هذه الوظيفة والمنطق داخل تلك الشفرة بشكل صحيح.

61
00:04:25,855 --> 00:04:28,870
الآن عزل الوحدة واختبارها من

62
00:04:28,870 --> 00:04:35,401
المفيد جدًا معرفة معظم المشاكل الأولية داخل

63
00:04:35,401 --> 00:04:41,079
شفرتك ثم إصلاحها حتى قبل دمج هذا التصحيح في الشفرة.

64
00:04:41,079 --> 00:04:44,259
الآن بمجرد البدء في دمج هذه الأجزاء في الكل،

65
00:04:44,259 --> 00:04:50,860
يصبح الأمر أكثر تعقيدًا لتكون قادرًا على إجراء اختبارات مفصلة لشفرتك.

66
00:04:50,860 --> 00:04:55,839
لذلك، وبالتالي، تشكل اختبارات الوحدة المعزولة خط

67
00:04:55,839 --> 00:05:01,029
الدفاع الأول ضد الأخطاء عندما تقوم بتطوير التطبيق الخاص بك،

68
00:05:01,029 --> 00:05:03,904
وتحديدًا تطبيقك الزاوي.

69
00:05:03,904 --> 00:05:06,189
الآن كما نرى مع الزاوي،

70
00:05:06,189 --> 00:05:10,540
لدينا فصل واضح بين المكونات الزاوي و DOM نفسه.

71
00:05:10,540 --> 00:05:13,339
حتى داخل مكون، على سبيل المثال، هناك،

72
00:05:13,339 --> 00:05:16,930
يتم تنفيذ منطق المكون الخاص بك تماما في

73
00:05:16,930 --> 00:05:22,101
التعليمات البرمجية typescript التي قمت بتنفيذها داخل مكون أن ملفات typescript.

74
00:05:22,101 --> 00:05:25,675
ثم يتم التحكم في DOM نفسه من خلال

75
00:05:25,675 --> 00:05:29,660
القالب الذي قمت بتصميمه للمكون الزاوي الخاص بك.

76
00:05:29,660 --> 00:05:33,475
حتى بيتا نفسها، ترى الفصل الواضح بين الاثنين.

77
00:05:33,475 --> 00:05:36,139
لذلك يمكنك ببساطة اختبار منطق

78
00:05:36,139 --> 00:05:41,615
رمز المكون الخاص بك نفسه دون كتابة قالب عمودي.

79
00:05:41,615 --> 00:05:47,350
ولكن بعد ذلك يمكنك أيضا النظر في الاثنين معا ومن ثم تقييم تلك الجوانب.

80
00:05:47,350 --> 00:05:50,731
كما سنرى في التمرين الذي يتبع هذه المحاضرة،

81
00:05:50,731 --> 00:05:53,879
سنقوم بالفعل بكل من هذين النهجين.

82
00:05:53,879 --> 00:05:56,685
ليس ذلك فقط، حقيقة أن الزاوي يستخدم

83
00:05:56,685 --> 00:06:01,910
حقن التبعية يعني أنه يمكنك حقن تبعيات وهمية داخل التطبيق الخاص بك.

84
00:06:01,910 --> 00:06:04,279
عندما أقول وهمية، أعني، على سبيل المثال،

85
00:06:04,279 --> 00:06:08,500
إذا كان المكون الخاص بك يعتمد على خدمة معينة

86
00:06:08,500 --> 00:06:13,220
، فيمكنك دائمًا تنفيذ خدمة وهمية تحاكي سلوك الخدمة

87
00:06:13,220 --> 00:06:17,689
ثم استبدالها في مكانها أثناء اختبار المكون بحيث يمكنك الحفاظ على

88
00:06:17,689 --> 00:06:22,550
المكون الخاص بك مستقلاً عن كيفية تنفيذ الخدمة بالفعل.

89
00:06:22,550 --> 00:06:27,110
طالما تم تصميم الواجهة بين المكون الخاص بك والخدمة بشكل صحيح

90
00:06:27,110 --> 00:06:32,045
، يمكنك استبدال خدمة وهمية في مكانها ولا يزال اختبار المكون الخاص بك.

91
00:06:32,045 --> 00:06:33,784
هناك، من وهمية،

92
00:06:33,784 --> 00:06:39,470
يمكنك بسهولة التحكم في ما يتم توفيره للمكون من الخدمة.

93
00:06:39,470 --> 00:06:43,220
لذلك يتيح لك هذا النهج إجراء اختبار الوحدة

94
00:06:43,220 --> 00:06:47,990
بتفصيل كبير داخل التطبيق الزاوي الخاص بك.

95
00:06:47,990 --> 00:06:53,375
هذا هو المكان الذي توفر أطر الاختبار مثل «الياسمين».

96
00:06:53,375 --> 00:06:55,459
لذلك ما تقدمه ياسمين هو

97
00:06:55,459 --> 00:07:03,110
إطار اختبار يحركه السلوك مصمم بالكامل في جافا سكريبت.

98
00:07:03,110 --> 00:07:06,170
الآن، هذا الإطار ياسمين هو إطار عام

99
00:07:06,170 --> 00:07:09,505
متاح لاختبار أي تطبيقات جافا سكريبت.

100
00:07:09,505 --> 00:07:18,565
تعتمد الزاوي الياسمين كنهج لتحديد اختباراتنا للأجزاء الزاوية الأخرى

101
00:07:18,565 --> 00:07:23,657
ومكوناتها والخدمات والجوانب المختلفة لتطبيقنا الزاوي.

102
00:07:23,657 --> 00:07:30,730
الآن، داخل (ياسمين)، تستخدم (ياسمين) شيئين يساعدونك

103
00:07:30,730 --> 00:07:33,722
واحد هو استخدام وظيفة «وصف».

104
00:07:33,722 --> 00:07:38,779
تمكنك وظيفة «وصف» من تجميع مجموعة من الاختبارات ومن ثم

105
00:07:38,779 --> 00:07:45,110
تنفيذ هذه الاختبارات معًا كمجموعة واحدة من الاختبارات.

106
00:07:45,110 --> 00:07:47,884
عندما نكتب التعليمات البرمجية في التمرين سترى لي

107
00:07:47,884 --> 00:07:52,225
أرفق مجموعة من الاختبارات داخل وظيفة وصف.

108
00:07:52,225 --> 00:07:55,389
ثم نكتب رمزنا لدينا، رمز

109
00:07:55,389 --> 00:08:00,214
الياسمين، لاختباراتنا الزاوي.

110
00:08:00,214 --> 00:08:05,171
الآن ضمن هذه الوظائف «وصف» سوف تستخدم أيضا ما يسمى وظائف «it».

111
00:08:05,171 --> 00:08:07,550
تمكنك وظائف «it» من تحديد

112
00:08:07,550 --> 00:08:11,949
الاختبارات الفردية التي تريد تنفيذها على التطبيق الزاوي الخاص بك.

113
00:08:11,949 --> 00:08:17,509
لذلك هذا هو المكان الذي سترى لي تحديد «it» ومن ثم تحديد أن

114
00:08:17,509 --> 00:08:21,185
طبيعة الاختبار معين ومن ثم

115
00:08:21,185 --> 00:08:25,259
تصميم رمز لهذا الاختبار معين مع وظيفة في «it».

116
00:08:25,259 --> 00:08:29,240
لذلك ونحن تصميم التعليمات البرمجية في التمرين ابحث عن «وصف» و

117
00:08:29,240 --> 00:08:33,575
«it» داخل تطبيقات الاختبار الزاوي الخاصة بك.

118
00:08:33,575 --> 00:08:37,559
وبمجرد الانتهاء من تصميم الاختبار مع إطار ياسمين،

119
00:08:37,559 --> 00:08:41,600
كارما هو أداة سطر الأوامر القائمة على جافا سكريبت

120
00:08:41,600 --> 00:08:46,174
التي تمكنك من إجراء هذه الاختبارات تلقائيا.

121
00:08:46,174 --> 00:08:48,440
الآن، كارما جنبا إلى جنب مع الياسمين،

122
00:08:48,440 --> 00:08:53,500
تمكنك من إجراء اختبارات لتطبيق الزاوي الخاص بك.

123
00:08:53,500 --> 00:08:56,375
الآن مع الكرمة، ما يدعمه الكرمة،

124
00:08:56,375 --> 00:08:59,065
هو أنه يتيح لك تفرخ

125
00:08:59,065 --> 00:09:04,409
خادم الويب الذي تقوم من خلاله بتحميل شفرة مصدر التطبيق الخاص بك

126
00:09:04,409 --> 00:09:13,370
ومن ثم تستخدم الكرمة متصفح لإجراء الاختبارات الفعلية لوحدتك المختلفة.

127
00:09:13,370 --> 00:09:17,100
لذلك هذا هو المكان الذي تقوم فيه بتشغيل اختباراتك باستخدام

128
00:09:17,100 --> 00:09:19,774
الكرمة، سترى الكرمة تكديس المتصفح،

129
00:09:19,774 --> 00:09:26,120
سواء كانت نافذة متصفح لمتصفح موجود أو

130
00:09:26,120 --> 00:09:29,174
ما إذا كنت تستخدم شيئًا يسمى PhantomJS الذي يبدأ

131
00:09:29,174 --> 00:09:32,715
متصفح وهمي خلف الكواليس لإجراء الاختبار.

132
00:09:32,715 --> 00:09:35,855
لا يهم، ولكن كارما يستخدم

133
00:09:35,855 --> 00:09:40,554
المتصفح في لحظة واحدة لتنفيذ اختبار التطبيق الزاوي الخاص بك.

134
00:09:40,554 --> 00:09:43,356
كما سترى في التمرين التالي،

135
00:09:43,356 --> 00:09:50,649
هذا هو المكان الذي إذا استمر أحد زملائك في الإصرار على أن تنفيذه

136
00:09:50,649 --> 00:09:55,070
لجزء معين من تطبيقك الزاوي

137
00:09:55,070 --> 00:09:59,659
صحيح ويحافظ على التأكيد على النقطة،

138
00:09:59,659 --> 00:10:03,110
يمكنك دائمًا تصميم بعض الاختبارات باستخدام الياسمين و

139
00:10:03,110 --> 00:10:07,081
الكرمة ومن ثم إجراء الاختبارات وإذا فشلت الاختبارات،

140
00:10:07,081 --> 00:10:11,095
يمكنك دائما دحض حجتهم.

141
00:10:11,095 --> 00:10:12,615
لذلك عندما يمكنك أن تستدير،

142
00:10:12,615 --> 00:10:14,465
تستدير إلى زميلك وتقول،

143
00:10:14,465 --> 00:10:17,240
لقد دهست كارما عقيدتك.

144
00:10:17,240 --> 00:10:21,664
الآن، بالطبع، تطبيقاتك الزاويّة ليست خالية تمامًا

145
00:10:21,664 --> 00:10:26,419
من مشاركة الإطار الزاوي نفسه.

146
00:10:26,419 --> 00:10:29,210
لا يمكن تصميم المكون الخاص بك بنفسك دون

147
00:10:29,210 --> 00:10:33,850
استخدام العديد من وظائف المكتبة التي يوفرها الزاوي لك،

148
00:10:33,850 --> 00:10:39,215
على الرغم من أن بعض المنطق الأساسي يمكن اختباره بشكل مستقل عن الزاوي.

149
00:10:39,215 --> 00:10:42,125
ما نسميه اختبارات منعزلة

150
00:10:42,125 --> 00:10:44,450
ولكن، أكثر وأكثر،

151
00:10:44,450 --> 00:10:46,659
وسوف تجد أنه ما لم كنت في،

152
00:10:46,659 --> 00:10:49,490
تريد دعم الإطار الزاوي نفسه أنك

153
00:10:49,490 --> 00:10:52,565
لن تكون قادرة على تنفيذ الكثير من اختبار

154
00:10:52,565 --> 00:11:00,639
الأجزاء الزاوي الخاصة بك سواء كانت مكونات أو خدمات أو أنابيب أو توجيهات.

155
00:11:00,639 --> 00:11:05,524
لذلك هذا هو المكان الذي توفر فيه أدوات

156
00:11:05,524 --> 00:11:08,690
الاختبار الزاوي بيئة اختبار تمكنك من

157
00:11:08,690 --> 00:11:12,384
إجراء اختبارات الوحدة داخل التطبيق الزاوي الخاص بك.

158
00:11:12,384 --> 00:11:18,139
لذا فإن أدوات الاختبار الزاوي كما ستروني أستخدمه

159
00:11:18,139 --> 00:11:20,480
في التمارين، في التمرين التالي،

160
00:11:20,480 --> 00:11:27,034
ستوفر لنا تطبيقات معينة للوظائف الزاوي التي تستخدمها

161
00:11:27,034 --> 00:11:33,950
في اختباراتك من أجل إعداد البيئة حيث يمكنك إجراء اختباراتهم.

162
00:11:33,950 --> 00:11:37,319
لذلك، هذا هو المكان الذي التفاعل مع البيئة الزاوي،

163
00:11:37,319 --> 00:11:41,404
بدلا من استخدام التطبيقات الزاوي الحقيقية،

164
00:11:41,404 --> 00:11:45,740
وسوف تستخدم هذه المرافق الاختبار التي من شأنها أن توفر

165
00:11:45,740 --> 00:11:50,355
وظائف كافية لتمكينك من إجراء الاختبارات.

166
00:11:50,355 --> 00:11:53,840
وهذا هو المكان الذي تستبيد أننا سوف

167
00:11:53,840 --> 00:11:57,825
تستخدم داخل التطبيق الزاوي لدينا هو جدا، مفيدة جدا.

168
00:11:57,825 --> 00:12:02,899
و تستبيد أساسا يخلق وحدات اختبار الزاوي.

169
00:12:02,899 --> 00:12:06,205
كما تدرك، المكونات الخاصة بك غير موجودة في حد ذاتها.

170
00:12:06,205 --> 00:12:09,850
يجب تضمين المكونات الخاصة بك داخل وحدة NG.

171
00:12:09,850 --> 00:12:14,264
الآن لا يمكنك ببساطة استخدام وحدة نغ القياسية لتنفيذ الاختبار الخاص بك.

172
00:12:14,264 --> 00:12:18,560
حيث

173
00:12:18,560 --> 00:12:24,549
يوفر لك TestBed، الذي يدعمه أداة الاختبار الزاوي، بيئة وحدة NG تمكنك من اختبار مكوناتها.

174
00:12:24,549 --> 00:12:25,850
لذا، داخل TestBed،

175
00:12:25,850 --> 00:12:29,929
سوف تستخدم شيئًا يسمى TestBed Create Component لإنشاء

176
00:12:29,929 --> 00:12:36,139
مكون فردي ومثيل للمكون لإجراء الاختبارات على ذلك.

177
00:12:36,139 --> 00:12:37,940
وعندما تقوم بذلك،

178
00:12:37,940 --> 00:12:42,454
يتيح لك TestBed الوصول إلى شيء يسمى ComponentFixture،

179
00:12:42,454 --> 00:12:48,500
فإن ComponentFixture هو شيء يوفر لك مقبضًا يتيح لك إحاطة

180
00:12:48,500 --> 00:12:56,419
المكون الخاص بك بوظائف كافية بحيث يمكن اختبار المكون بنفسه.

181
00:12:56,419 --> 00:13:00,950
يوفر لاعبا اساسيا الوصول إلى المكون نفسه ومن

182
00:13:00,950 --> 00:13:05,299
ثم أيضا من خلال ذلك سوف نستخدم شيئا يسمى ديبوغليمنت.

183
00:13:05,299 --> 00:13:08,375
سترى لي استخدام ذلك في التمرين الذي يلي.

184
00:13:08,375 --> 00:13:11,424
يتيح لك DebugElement الوصول إلى DOM،

185
00:13:11,424 --> 00:13:16,754
وهذا هو القالب المدعوم كجزء من المكون الخاص بك.

186
00:13:16,754 --> 00:13:23,899
وبالتالي، يمكنك القيام بالتلاعبات على DOM مثل النقر على العناصر في DOM،

187
00:13:23,899 --> 00:13:29,315
والحصول على الوصول إلى عنصر DOM ثم قراءة ما هو مغلق

188
00:13:29,315 --> 00:13:35,600
داخل عناصر Dom تلك وهكذا والتي سوف تمكنك من إجراء الاختبارات.

189
00:13:35,600 --> 00:13:37,669
الآن، قبل أن ننتقل إلى التمرين،

190
00:13:37,669 --> 00:13:43,250
أريدك أن تكون على علم ببعض هذه الأشياء حتى عندما نواجهها في

191
00:13:43,250 --> 00:13:51,139
التمرين نفسه سترى لماذا أستفيد من كل قطعة من هذه القطع المختلفة.