2017-02-22 4 views
0

サービスから観測可能なコンポーネントをテストしているときにエラーが発生しましたが、私は次のエラーが表示されます:チェックされた後、式が変更されました、以前のvale ''、現在の値:[オブジェクトオブジェクト]。これで私を助けてください。スペックファイルは次のとおりです:ジャスミンで角度2のコンポーネントをテストする際に、式が変更されました。

import { ManualProcessService } from '../../services/manual-process.service'; 
import { ManualProcessComponent } from './manual-process.component'; 
import { MANUALPROCESSMOCKDATA } from '../../shared/mocks/mock-manualprocessdata'; 
import {DataTableModule, SharedModule, DropdownModule as PrimeNgDropDownModule, CheckboxModule, InputTextModule} from 'primeng/primeng'; 
import {MenuModule} from 'primeng/components/menu/menu'; 
import {DropdownModule} from 'ng2-bootstrap'; 
import { PopoverModule } from 'ng2-popover'; 
import {Observable} from 'rxjs/Observable'; 
import { IManualProcessData} from '../../models/manual-process.model'; 
import {FormsModule, ReactiveFormsModule} from '@angular/forms'; 
import { 
    async, 
    TestBed, 
    fakeAsync, 
    tick, 
} from '@angular/core/testing'; 

class MockManualProcessService { 

    getManualProcessData(): Observable<IManualProcessData> { 
     return Observable.of(MANUALPROCESSMOCKDATA); 
    } 
} 

describe('Testing Manual Process Component',() => { 

    let fixture, 
    event = { 
    first: 0, 
    rows: 10 
    }, 
    manualProcessService; 

    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     declarations: [ 
     ManualProcessComponent 
     ], 
     providers: [ 
     { provide: ManualProcessService, useClass: MockManualProcessService } 
     ], 
     imports: [ 
     FormsModule, 
     ReactiveFormsModule, 
     DataTableModule, 
     SharedModule, 
     PopoverModule, 
     PrimeNgDropDownModule, 
     DropdownModule.forRoot(), 
     CheckboxModule, 
     InputTextModule, 
     MenuModule 
    ], 
    }); 
    fixture = TestBed.createComponent(ManualProcessComponent); 
    manualProcessService = TestBed.get(ManualProcessService); 
    spyOn(manualProcessService, 'getManualProcessData').and.returnValue(Observable.of(MANUALPROCESSMOCKDATA)); 
    fixture.detectChanges(); 
    }); 

    it('Filters should be reset', (done) => { 
    fixture.componentInstance.clearFilters() 
    fixture.detectChanges(); 
    expect(fixture.componentInstance.filterBy.length).toBe(0); 
    done(); 
    }) 


    it('Should load list of manual process files', fakeAsync(() => { 
    fixture.componentInstance.loadData(event); 
    tick(); 
    fixture.detectChanges(); 
    expect(fixture.componentInstance.filterBy.length).toBe(10); 
    })); 
}); 

私は角度2とユニットテストを初めて使用しています。誰かが導くことができます、私は間違って何をしています

答えて

0

変更は値が変更とされるたびに検出されなければならない、あなたのそれぞれの値が割り当てられる前に、そのハイテクエラーがそれステートメント内

fixture.detectChanges(); 

を持っており、すべてのために呼び出す取得します実行される前に、価値の変化。

アップデート1:

import { ManualProcessService } from '../../services/manual-process.service'; 
import { ManualProcessComponent } from './manual-process.component'; 
import { MANUALPROCESSMOCKDATA } from '../../shared/mocks/mock-manualprocessdata'; 
import { IManualProcessData } from '../../models/manual-process.model'; 
import { 
    async, 
    TestBed, 
    fakeAsync, 
    tick, 
} from '@angular/core/testing'; 
// used to interact with the HTML elements 
import { By } from '@angular/platform-browser'; 

describe('Testing Manual Process Component',() => { 

    let fixture, 
     event = { 
      first: 0, 
      rows: 10 
     }, 
     manualProcessService; 
    let hardCodedData = { 
     ... 
    }; 
    beforeEach(async() => { 
     TestBed.configureTestingModule({ 
      imports: [], 
      declarations: [ManualProcessComponent], 
      providers: [ 
       { provide: ManualProcessService, useValue: mockManualProcessService } 
      ] 
     }).compileComponents(); 
    }); 

    beforeEach(() => { 
     fixture = TestBed.createComponent(ManualProcessComponent); 
     component = fixture.componentInstance; 
     debugElement = fixture.debugElement; 
     element = fixture.nativeElement; 
     // analyse your component and the variables used in it and make hard values of them 
     let variables; 
     // Note: Never call detectChanges() inside a beforeEach 
    }) 

    it('Filters should be reset', (done) => { 
     fixture.componentInstance.clearFilters(); 
     fixture.detectChanges(); 
     expect(fixture.componentInstance.filterBy.length).toBe(0); 
     done(); 
    }) 

    it('Should load list of manual process files', fakeAsync(() => { 
     fixture.componentInstance.loadData(event); 
     tick(); 
     fixture.detectChanges(); 
     expect(fixture.componentInstance.filterBy.length).toBe(10); 
    })); 

    it('a sample case to check if the text box contains expected value aor not',()=>{ 
     expect(debugElement.query(By.css('.className')).nativeElement.textContent).toBe('somename'); 
    }); 
}); 
+0

[はい何であるいくつかの時間では、私の上記のコード –

+0

で編集を提供plsはオフィス – Aravind

+0

ない問題を見出したが、解決策 –

関連する問題