Kendo grid testing in Angular

I am trying to run Karma tests with kendo grid on a new Angular project. The specs for this component looks like

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

      

Tests work fine with chrome, but in PhantomJS the tests hang.

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.

      

Everything works fine when running tests against Chrome. I suspect I am not managing the asynchronous import when the test place is configured correctly. If I fully pull out kendo, the tests will end. I tried to pass the call done

as part beforeEach

but also didn't work

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

      

+3


source to share


2 answers


Have you tried defining your fixture and component, determined .compileComponents()

how it would be done asynchronously, as well as setting up your test bench?



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

      

0


source


Try adding a second before each like this:

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


beforeEach(() => {
  done();
}));

      



not as graceful as my main simon answering above but has to do the trick

0


source







All Articles