2017-07-26 113 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; 
});`