انگولار - چگونه میدانید هنگام تست واحد، کدام کامپوننتها را باید وارد کنید؟


من از Angular2 (نسخه نهایی 2.1.0) استفاده میکنم.

وقتی از ... برای تست واحد استفاده میکردم، همه کامپوننتها را از طریق AppModule وارد میکردم

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [AppModule],
      ...

با این حال، این باعث شد اجرای آزمایشها کند شود.

من اکنون تنها اجزایی را که نیاز دارم به شرح زیر فهرست میکنم ...

  beforeEach(async(() => {
    // noinspection JSUnusedGlobalSymbols
    TestBed.configureTestingModule({
      imports: [BrowserModule, FormsModule, HttpModule], // modules
      declarations: [
        // pipes
        AttributeCheckPipe,
        // directives
        // DatePickerDirective,
        ...

با این حال، من قطعات زیادی دارم و مطمئن نیستم کدام یک را باید وارد کنم. خروجی تست به من نمیگوید کدام یک را باید وارد کنم. فقط به سادگی موفق میشود (وقتی همه آنها را وارد میکنم) یا شکست میخورد (اگر وارد نکنم) اما به من نمیگوید کدام یک لازم هستند.

این خطا آزاردهنده/بیفایده است..

invokeTask@node_modules/zone.js/dist/zone.min.js:1:36996
onInvokeTask@node_modules/zone.js/dist/proxy.min.js:1:2190
invokeTask@node_modules/zone.js/dist/zone.min.js:1:36939
runTask@node_modules/zone.js/dist/zone.min.js:1:31466
a@node_modules/zone.js/dist/zone.min.js:1:17818
g@node_modules/core-js/client/shim.min.js:8:19058
node_modules/core-js/client/shim.min.js:8:19180
k@node_modules/core-js/client/shim.min.js:8:14294
l@node_modules/zone.js/dist/zone.min.js:1:18418
l@node_modules/zone.js/dist/zone.min.js:1:18175
node_modules/zone.js/dist/zone.min.js:1:18715

چطور میتوانم بازخورد بگیرم که کدام اجزا را موفق به وارد کردن نشدهام؟ ممنون

من از کارما و فانتومجیاس استفاده میکنم.

گزیده پیکربندی کارمای من این است ..

client: {
  captureConsole: true
},
logLevel: config.LOG_DEBUG

پاسخ شماره ۱

در نهایت کمی پیشرفت در اینجا داشتم. یک بلوک catch به compileComponents() اضافه کردم و e.message را ثبت کردم و خروجی مفیدی دریافت کردم که به من چیزی برای کار کردن میدهد!

این کد من است ..

  beforeEach(async(() => {
    TestBed.configureTestingModule({

      imports: [FormsModule, HttpModule, routing], // modules

      declarations: [
        SaveSearchModalComponent
      ],
      providers: [
        ESQueryService,
        RESTQueryService,
      ]
    }).compileComponents()
      .then(() => {
        fix = TestBed.createComponent(SaveSearchModalComponent);
        instance = fix.componentInstance;
        injector = fix.debugElement.injector;
      }).catch((e) => {
      console.log(e.message);
      throw e;
    });
  }));

یک بخش از خروجی پیام خطا این است ...

'dynamic-form' یک عنصر شناختهشده نیست: 1. اگر 'dynamic-form' یک کامپوننت انگولار است، پس تأیید کنید که جزئی از این ماژول باشد. 2. اگر 'dynamic-form' یک کامپوننت وب است، سپس 'CUSTOM_ELEMENTS_SCHEMA' را به '@NgModule.schemas' این کامپوننت اضافه کنید تا این پیام سرکوب شود.

شگفتانگیز، این در هیچکدام از مستندات پوشش داده نشده است (اما من باید زودتر حدس میزدم!)

و حالا چه ...

وای، بعد از انجام کارهای بالا (که ۹۹٪ مشکلات را حل کرد) با یک پیام خطای بیفایده دیگر مواجه شدم ...

کامپوننت e بخشی از هیچ NgModule نیست یا ماژول به ماژول شما وارد نشده است.

که از ... میآید

/node_modules/@angular/compiler/bundles/compiler.umd.js

پس با دنبال کردن توصیهها در ..

کامپوننت Angular 2 بخشی از هیچ NgModule نیست

من این عبارت ثبت لاگ را به compiler.umd.js اضافه کردم

// I ADDED THIS LOG STATEMENT
console.log('compType', String(compType));
// THIS LINE EXISTS ALREADY
throw new Error("Component " + stringify(compType) + " is not part of any NgModule or the module has not been imported into your module.");

این معمولاً مجرم را شناسایی میکند. با این حال، اینجا من خروجی نادرست گرفتم...

گزارش: 'function e(e) {__cov_m4LFTxiG42jWqZk7He0hiA.f['4']++;__cov_m4LFTxiG42jWqZk7He0hiA.s['11']++; this.router = e, this.formErrors = {invalidCreds: false};}'

که به this.router اشاره میکند

پس من وارد کردن مسیریابی را حذف کردم و voilà!

اما باورنکردنی است که این درد لازم باشد.