2017-02-15 10 views
6

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

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

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

/परिक्षण।

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

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

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

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

/* 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(); 
    }); 
}); 

उत्तर

1

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

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

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

मैंने ओवरराइड डायरेक्टिव() के साथ NgbTooltip निर्देश को ओवरराइड करने का प्रयास किया लेकिन मूल को हमेशा परवाह किए जाने लगते थे।

वास्तविक त्रुटि जानने के लिए मैं अपनी इकाई परीक्षण कल्पना के लिए निम्न कहा:

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) 
1

मैं बस करने के लिए सुझाव है:

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

यह तो वास्तविक अपवाद है कि होने वाली होने के लिए लग रहा था दिखाया गया है इसे पहले से दबाएं:

// fix 'Error during cleanup of component' 
NgbTooltip.prototype.ngOnDestroy = jasmine.createSpy('ngOnDestroy'); 
(NgbTooltip.prototype.ngOnDestroy as jasmine.Spy).and.stub(); 
संबंधित मुद्दे