2017-09-28 4 views
0

ユニットテストで角2を試してみてください。npm run testを実行すると奇妙なエラーが発生します。小さなミスが、この奇妙なエラーを把握するunabelされることがあります。TypeError:jit__object_Object_38はコンストラクターではありません。NgRedux、Angular 2

import { TestBed, async, inject } from '@angular/core/testing'; 
import { TestModule } from '../../test/test.module'; 
import { DevExtremeModule } from 'devextreme-angular'; 
import { RouterTestingModule } from '@angular/router/testing'; 
import { HttpModule, XHRBackend, RequestOptions } from '@angular/http'; 
import { Templates } from './templates.component'; 
import { CommandButton } from '../../common/tool/command-button.component'; 
import { NgReduxModule, NgRedux } from '@angular-redux/store/lib'; 
import { MockBackend } from "@angular/http/testing/mock_backend"; 
import { HttpService } from "../../services/http.service"; 
import { AppState } from '../../redux/index'; 


// Mock out the NgRedux class with just enough to test what we want. 
class MockRedux extends NgRedux<AppState> { 
    constructor(private state: AppState) { 
    super(null); 
    } 
    dispatch =() => undefined; 
    getState =() => this.state; 
} 


describe('Component : Templates',() => { 

    let fixture; 
    let mockRedux: NgRedux<AppState>; 
    let mockState : AppState = { 
    session : { token: '', user: { firstName : 'Test User' }, isError: null } 
    }; 

    beforeEach(done => { 
    mockRedux = new MockRedux(mockState); 

    const configure = (testBed: TestBed) => { 
     testBed.configureTestingModule({ 
     imports: [ TestModule, DevExtremeModule, 
      RouterTestingModule, HttpModule ], 
     declarations : [ Templates ], 
     providers: [ 
      { provide: XHRBackend, useClass: MockBackend }, 
      { 
      provide: HttpService, 
      useFactory: (backend: XHRBackend, options: RequestOptions, redux: NgRedux<AppState>) => { 
       return new HttpService(backend, options, mockRedux); 
      }, 
      deps: [XHRBackend, RequestOptions] 
      }, 
      { provide: NgRedux, useClass : mockRedux } 
     ] 
     }); 
    }; 

    TestModule.configureTests(configure).then(testBed => { 
     fixture = testBed.createComponent(RegTemplates); 
     fixture.detectChanges(); 
     done(); 
    }); 

    }); 

    it('should instantiate Templates Component', async(inject([],() => { 
    fixture.whenStable().then(() => { 
     fixture.autoDetectChanges(); 
     expect(fixture.componentInstance).toBeDefined(); 
    }); 
    }))); 

    // To do 
}); 

エラーは言う:私にとって

TypeError: jit__object_Object_38 is not a constructor 

enter image description here

答えて

1

を問題は、私が代わりにuseClassを使用しようとしていたましたuseValueの場合は、失敗するかもしれませんが、難しい方法を学んだ...;)

の代わりに { provide: NgRedux, useValue : mockRedux }が正しく使用されています
beforeEach(done => { 
    mockRedux = new MockRedux(mockState); 

    const configure = (testBed: TestBed) => { 
     testBed.configureTestingModule({ 
     imports: [ TestModule, DevExtremeModule, 
      RouterTestingModule, HttpModule ], 
     declarations : [ RegTemplates, CommandButton, RegHeader, 
      RegStructureImage ], 
     providers: [ 
      { provide: XHRBackend, useClass: MockBackend }, 
      { 
      provide: HttpService, 
      useFactory: (backend: XHRBackend, options: RequestOptions, redux: NgRedux<AppState>) => { 
       return new HttpService(backend, options, mockRedux); 
      }, 
      deps: [XHRBackend, RequestOptions] 
      }, 
      { provide: NgRedux, useValue : mockRedux } 
     ] 
     }); 
    }; 

    TestModule.configureTests(configure).then(testBed => { 
     fixture = testBed.createComponent(RegTemplates); 
     fixture.detectChanges(); 
     done(); 
    }); 

    }); 
関連する問題