تعلّم كيفية اختبار تمارينك في Haskell على Exercism
نفّذ الأمر التالي في دليل التمرين لتشغيل الاختبارات:
stack test
لتشغيل الاختبارات عند كل حفظ للملف، نفّذ هذا الأمر بدلًا منه:
stack test --file-watch
No .cabal file found in directory
فأنت على الأرجح تستخدم إصدارًا قديمًا من stack وتحتاج إلى ترقيته.
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
فافعل ما تقوله لك فحسب، وسينزّل إصدار المترجم الصحيح ويثبّته:
stack setup
حل التمرين هو وحدة Haskell. يُعرَّف اسم الوحدة في عبارة استيراد داخل مجموعة الاختبارات، عادةً في البداية:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
في هذا المثال، يستورد ملف الاختبار، في السطر 4، وحدة اسمها ModuleName تُصدّر دالة اسمها someFunc. هذا يعني أنه عليك إنشاء ملف اسمه ModuleName.hs يكون على شيء مثل هذا:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
ستجد ملفًا بهذا الاسم موجودًا بالفعل في src/، ويمكنك استخدامه نقطة انطلاق لحلك.
لا تنسَ أن هذا الهيكل الأولي موجود فقط لت帮助你 تبدأ. لا تتردد في تغييره كليًا إن رأيت أن ذلك هو الصواب.
إن أردت استخدام بعض الحزم لكتابة حل أكثر أناقة، فأضف الحزم أولًا إلى تبعيات حلك في package.yaml:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
أثناء العمل محليًا، يمكنك استخدام أي حزم تشاء. أما مشغّل الاختبارات على الإنترنت فليس لديه إلا مجموعة محدودة من الحزم. الحزم المتاحة هي
base، containers، array، time، mtl، deepseq، exceptions، bytestring)، إضافةً إلىإن سلّمت حلًا يستخدم حزمة غير متاحة، فسيصطدم مشغّل الاختبارات بغياب اتصاله بالإنترنت وينتج خطأً كهذا:
Cabal file info not found for unavailable-package-1.0@..., updating
Selected mirror https://hackage.haskell.org/
Downloading root
HttpExceptionRequest Request {
host = "hackage.haskell.org"
...
}
(ConnectionFailure ...)
إن أردت التجربة بحلك في GHCi، فنفّذ الأمر:
stack ghci
يوصى بشدة بتشغيل hlint على حلك لترى إن كان يلتقط شيئًا فاتك:
hlint ModuleName.hs
لست مضطرًا لقبول كل الاقتراحات التي يقدمها hlint، لكنها عادةً ما تساعدك على تعلم كيفية كتابة كود Haskell جميل وسليم الأسلوب.