angular - घटक में NgbModule.forRoot() का प्रयोग करने से विफल होने वाले परीक्षण




typescript jasmine (2)

मैं एक नेस्टेड घटक में टूलटिप्स और मोडल्स का उपयोग कर रहा हूं, और मेरी कल्पना फ़ाइल में, मैं परीक्षण मॉड्यूल में NgbModule.forRoot() आयात कर रहा हूँ।

यह एक घटक को छोड़कर हर जगह काम करता है, और यदि मैं इस आयात को जोड़ता हूं, तो मेरी यूनिट के कई परीक्षण अचानक इस त्रुटि से असफल होने लगते हैं:

TypeError: this._unregisterListenersFn is not a function
        at NgbTooltip.ngOnDestroy

मैं बंडलिंग / परीक्षण के लिए कोनेरी सीएलआई का उपयोग कर रहा हूं।

मेरे परीक्षणों में विफल रहने वाला यह एकमात्र घटक है

मैंने टूलटिप / मॉडल मॉड्यूल को अलग से और उनके प्रासंगिक प्रदाताओं को अलग से आयात करने का प्रयास किया है और मैं इसके बाद के संस्करण की त्रुटि प्राप्त कर रहा हूं। अगर मैं इसे बिना forRoot() हूं, तो मुझे डी forRoot() मिलती है।

मुझे कोई सुराग नहीं है कि समस्या क्या है

यहाँ कल्पना फ़ाइल है:

/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { APP_BASE_HREF } from '@angular/common';
import { RouterTestingModule } from '@angular/router/testing';
import { NgbModule, NgbTooltipModule, NgbTooltipConfig, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
import { NgbModalStack } from '@ng-bootstrap/ng-bootstrap/modal/modal-stack';

import { ListItemComponent } from './list-item.component';
import { VideoPlayerService } from '../../../video-player';
import { CalendarRoutingService } from '../../calendar-routing.service';

describe('ListItemComponent', () => {
  let component: ListItemComponent;
  let fixture: ComponentFixture<ListItemComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        ListItemComponent
      ],
      imports: [RouterTestingModule, NgbModule.forRoot()],
      providers: [
        VideoPlayerService,
        CalendarRoutingService,
        // NgbModalStack,
        // NgbTooltipConfig
      ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ListItemComponent);
    component = fixture.componentInstance;
    component.item = { records: [] };
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

मेरे पास एक वैकल्पिक हल है लेकिन मुझे लगता है कि यह एक परीक्षण के भीतर चलते समय एनजीबीट्रॉप्ट के साथ एक मुद्दा है। NgbTooltip की ngOnDestroy विधि को फिर से परिभाषित करने के लिए निम्न विश्व स्तर को जोड़ें:

NgbTooltip.prototype.ngOnDestroy = function () {
    this.close();
    //this._unregisterListenersFn();
    this._zoneSubscription.unsubscribe();
};

तीसरी लाइन में टिप्पणी की गई, मेरी इकाई परीक्षणों में दिखाई देने वाली त्रुटि को रोकता है। एक हैक के बिट लेकिन यूनिट परीक्षणों में ठीक होना चाहिए। मुझे लगता है कि यह फ़ंक्शन ngOnInit () में प्रारंभ नहीं किया गया है जब एक परीक्षण स्थिरता में चल रहा है।

मैंने ओवरड्राइड डायरेक्टिव () के साथ एनजीबीटॉलटिप निर्देश को ओवरराइड करने का प्रयास किया, लेकिन मूल को हमेशा परवाह किए बिना बुलाया जा रहा था।

वास्तविक त्रुटि को खोजने के लिए मैंने अपनी यूनिट टेस्ट स्पेस में निम्नलिखित को जोड़ा:

afterEach(() => {
  fixture.destroy();
});

इसके बाद वास्तविक अपवाद प्रदर्शित किया गया जो प्रतीत होता है:

TypeError: this._unregisterListenersFn is not a function
at NgbTooltip.webpackJsonp.../../../../@ng-bootstrap/ng-bootstrap/tooltip/tooltip.js.NgbTooltip.ngOnDestroy (http://localhost:9876/_karma_webpack_/vendor.bundle.js:4522:14)
at callProviderLifecycles (http://localhost:9876/_karma_webpack_/vendor.bundle.js:103669:18)
at callElementProvidersLifecycles (http://localhost:9876/_karma_webpack_/vendor.bundle.js:103638:13)
at callLifecycleHooksChildrenFirst (http://localhost:9876/_karma_webpack_/vendor.bundle.js:103622:17)
at destroyView (http://localhost:9876/_karma_webpack_/vendor.bundle.js:104948:5)
at callViewAction (http://localhost:9876/_karma_webpack_/vendor.bundle.js:105094:13)
at execComponentViewsAction (http://localhost:9876/_karma_webpack_/vendor.bundle.js:105006:13)
at destroyView (http://localhost:9876/_karma_webpack_/vendor.bundle.js:104947:5)
at callViewAction (http://localhost:9876/_karma_webpack_/vendor.bundle.js:105094:13)
at execComponentViewsAction (http://localhost:9876/_karma_webpack_/vendor.bundle.js:105006:13)

मैं इससे पहले ही स्टब करने का सुझाव दूंगा:

// fix 'Error during cleanup of component'
NgbTooltip.prototype.ngOnDestroy = jasmine.createSpy('ngOnDestroy');
(NgbTooltip.prototype.ngOnDestroy as jasmine.Spy).and.stub();




ng-bootstrap