تست واحد - تفاوت بین تگهای import/require و reference در تایپاسکریپت چیست
من دارم تلاش میکنم تا برخی کدهای فرانتاند تایپاسکریپت را با موکا تست کنم. مشکل این است که من از تگهای مرجع تایپاسکریپت برای IntelliSense در وباستورم استفاده میکنم تا کد فرانتاندم را حل کنم. من باید فایلها را در مرورگر با استفاده از requireJS بارگذاری کنم، زیرا تگهای مرجع این کار را نمیکنند. تا اینجا، توانستهام این کار را انجام دهم.
اما سپس، میخواهم کد را با Mocha آزمایش کنم - که مشکل از همینجا آغاز میشود. به نظر میرسد فایلهای آزمایشی Mocha هیچ ارتباطی با کد مورد آزمایش ندارند مگر اینکه با استفاده از دستورات import/require وارد شوند، حتی با وجود اینکه تگهای مرجع Typescript اضافه شدهاند. اگر سعی کنم کد موجود در فایل ts مورد آزمایش را export کرده و در فایلهای واحد آزمون Mocha وارد کنم، دیگر سایر فایلهای ts که شامل کد فرانتاند هستند نمیتوانند آن را شناسایی کنند.
این وضعیت را در نظر بگیرید:
TS File A references TS File B using Typescript reference tags.
Mocha Unit Test X tries to reference TS file B using reference tags, which does not work.
Mocha Unit Test X tries to reference TS file B using import/require statments, which requires that code in TS file B be "exported".
If TS file B is "exported" then File A can't reference it anymore.
من نوعی در سیستم مدیریت وابستگی احمقانهای که بهوجود آمده گرفتار شدهام، بهخاطر اینکه سعی میکنم یک پروژه تایپاسکریپت/NodeJS را با Mocha تست کنم. لطفاً به من کمک کنید تا بفهمم وابستگیها در اینجا چگونه کار میکنند و چگونه میتوانم این مشکل را مرتب/ساده کنم.
اگر یک چارچوب بهتر و به همان اندازه قدرتمند وجود دارد که برای این نوع پروژه مناسب باشد و بتواند تست واحد (و تست از ابتدا تا انتها) ارائه دهد، لطفاً پیشنهاد دهید.
پاسخ شماره ۱
سادهترین راه حل: در فرانتاند از AMD استفاده کنید (نه ادغام رفرنسها) و در mocha از CommonJS استفاده کنید. عیب آشکار این است که شما نیاز دارید کد خود را دو بار کامپایل کنید، یک بار هنگام اجرای فرانتاند و جداگانه هنگام اجرای mocha. جاوااسکریپت تولید شده در حالت mocha با جاوااسکریپت تولید شده در حالت فرانتاند متفاوت خواهد بود. ممکن است بخواهید از --outDir برای جدا کردن دو حالت استفاده کنید.