angular - چگونه با استفاده از sinon نوع export را شبیهسازی کنیم؟
چگونه میتوانم یک نمونه استاب ایجاد کنم برای
import { Observable } from 'rxjs/Observable';
export type Translation = { [key: string]: string }
export type LoaderTranslations = { [key: string]: Translation }
کلاس انتزاعی BaseLoader:
import { LoaderTranslations } from './dictionary';
export abstract class BaseLoader {
public abstract loadTranslations(items: string[]): Promise<LoaderTranslations>;
}
آزمایشهای من:
import { BaseLoader } from './interface/base-loader';
import { LoadedTranslations } from './interface/dictionary';
describe(`test`, () => {
let loaderMock: any,
translations;
beforeEach(() => {
loaderMock = sinon.createStubInstance(BaseLoader);
translations = sinon.createStubInstance(LoadedTranslations);
// Then I want create spy for promise by using this translations stub
});
});
من نمیتوانم stub برای دیکشنری LoaderTranslations خود ایجاد کنم. خطای زیر را دریافت کردم:
'LoaderTranslation' تنها به یک نوع اشاره دارد، اما در اینجا به عنوان یک مقدار استفاده شده است.
پ.ن. متأسفم که سؤال احمقانهای میپرسم، اما من اخیراً از C# به TypeScript مهاجرت کردهام و واقعاً برایم دشوار است که بفهمم چه چیزی در حال رخ دادن است.
پاسخ شماره ۱
کامپایلر TypeScript پاکسازی نوع را انجام میدهد که به این معنی است که نوعها در مرحلهی کامپایل ناپدید میشوند. این یعنی شما نمیتوانید از نوعها یا اینترفیسها به عنوان آرگومان یا مقادیر در کد زمان اجرا استفاده کنید.
برای ساختن استاب از چیزی، شما باید یک چیز قابل مشاهده در زمان اجرا برای استاب کردن داشته باشید؛ مانند یک کلاس.
به طور ساده، میتوانید یک شیء ایجاد کنید که با نوع LoadedTranslations مطابقت داشته باشد و یا مستقیماً از آن استفاده کنید (چون یک استاب است، فقط نه یکی که توسط Sinon تولید شده است) - یا آن را برای ایجاد یک استاب وارد کنید.