2017-07-26 71 views
2

我試圖讓我的Karma測試在一個全新的Angular項目中與劍道網格一起工作。這個組件的規格看起來像在角度測試Kendo網格

import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 
import { RateTableProviderService } from "../_services/rate-table-provider.service"; 
import { RateTableComponent } from './rate-table.component'; 
import { Observable } from 'rxjs/Rx'; 
import { Response, ResponseOptions } from "@angular/http"; 
import { IRateTableListViewModel } from "./models/IRateTableListViewModel"; 
import { GridModule } from '@progress/kendo-angular-grid'; 


describe('RateTableComponent',() => { 
    let component: RateTableComponent; 
    let fixture: ComponentFixture<RateTableComponent>; 
    let observableSource = [ 
     { 
      id: "3482cd2f-16f8-4d62-8d5d-d761de35e737", 
      name: "Rate table 1", 
      enabled: false, 
      effectiveDate: new Date(), 
      creditTierSetName: "", 
      loanProducts: "" 
     }, 
     { 
      id: "3482cd2f-16f8-4d62-8d5d-d761de35e739", 
      name: "Another rate table", 
      enabled: false, 
      effectiveDate: new Date(), 
      creditTierSetName: "", 
      loanProducts: "" 
     } 
     ]; 

    class MockRateTableProviderService extends RateTableProviderService { 
    constructor() { 
     super(null); 
    } 
    getRateTableData(): Observable<Array<IRateTableListViewModel>> { 
     return Observable.from([observableSource]); 
    } 
    } 
    beforeEach(async(() => { 
    let mockRateTableProviderService = new MockRateTableProviderService(); 
    TestBed.configureTestingModule({ 
     declarations: [RateTableComponent], 
     providers: [ 
     { provide: RateTableProviderService, useValue: mockRateTableProviderService } 
     ], 
     imports: [GridModule] 
    }) 
     .compileComponents(); 
    })); 

    beforeEach(() => { 
    fixture = TestBed.createComponent(RateTableComponent); 
    component = fixture.componentInstance; 
    fixture.detectChanges(); 
    }); 

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

測試運行正常,但在PhantomJS中,測試掛起。

PhantomJS 2.1.1 (Windows 8 0.0.0) RateTableComponent should be created FAILED 
     Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 

對Chrome運行測試時一切正常。我懷疑我在正確設置測試平臺時沒有管理異步導入。如果我完全拔出劍道,測試就完成了。我想在一個done調用傳遞作爲beforeEach的一部分,但也沒有工作

beforeEach(async((done) => { 
    let mockRateTableProviderService = new MockRateTableProviderService(); 
    TestBed.configureTestingModule({ 
     declarations: [RateTableComponent], 
     providers: [ 
     { provide: RateTableProviderService, useValue: mockRateTableProviderService } 
     ], 
     imports: [GridModule] 
    }) 
     .compileComponents().then(done); 
    })); 
+0

我得到這個相同的錯誤! –

+0

此處同樣的錯誤,找到任何解決方法? –

回答

0

您是否嘗試過在定義的.compileComponents()的解決您的夾具和部件,因爲這會然後異步執行,以及與你的測試平臺的設置?

`.compileComponents.() 
.then(() => { 
    fixture = TestBed.createComponent(RateTableComponent); 
    component = fixture.componentInstance; 
});`