2016-08-18 11 views
22

मैंने अभी एंगुलर आरसी 5 में अपग्रेड किया है और अब सभी घटक जो 'ROUTER_DIRECTIVES' का उपयोग करते हैं 'राउटर के लिए सभी पैरामीटर को हल नहीं कर सकता है: (?,?,?,?,?,?,?)' जब मैं घटक का परीक्षण करने की कोशिश करता हूं।राउटर के लिए सभी पैरामीटर को हल नहीं कर सकता: (?,?,?,?,?,?,?) कोणीय आरसी 5 में जब यूनिट परीक्षण

import { inject, addProviders } from '@angular/core/testing'; 
import { ComponentFixture, TestComponentBuilder } from '@angular/core/testing'; 
import { Component } from '@angular/core'; 
import { ROUTER_DIRECTIVES, Router } from '@angular/router'; 

import { HomeComponent } from './home.component'; 
import { UserService } from '../_services/user.service'; 

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

    beforeEach(() => { 
    addProviders([HomeComponent, UserService, ROUTER_DIRECTIVES, Router]); 
    }); 

    it('should inject the component', inject([HomeComponent, UserService, ROUTER_DIRECTIVES, Router], 
    (component: HomeComponent) => { 
     expect(component).toBeTruthy(); 
     // expect(component.currentUser.firstname).toEqual('Jan'); 
    })); 

पूर्ण त्रुटि लॉग:

 Chrome 52.0.2743 (Windows 10 0.0.0) 
    Error: Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?). 
     at new BaseException (webpack:///C:/ng/anbud/~/@angular/compiler/src/facade/exceptions.js:27:0 <- src/test.ts:2943:23) 
     at CompileMetadataResolver.getDependenciesMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:551:0 <- src/test.ts:24542:19) 
     at CompileMetadataResolver.getTypeMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:448:0 <- src/test.ts:24439:26) 
     at webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:594:0 <- src/test.ts:24585:41 
     at Array.forEach (native) 
     at CompileMetadataResolver.getProvidersMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:575:0 <- src/test.ts:24566:19) 
     at CompileMetadataResolver.getNgModuleMetadata (webpack:///C:/ng/anbud/~/@angular/compiler/src/metadata_resolver.js:305:0 <- src/test.ts:24296:58) 
     at RuntimeCompiler._compileComponents (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:150:0 <- src/test.ts:37986:47) 
     at RuntimeCompiler._compileModuleAndAllComponents (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:78:0 <- src/test.ts:37914:37) 
     at RuntimeCompiler.compileModuleAndAllComponentsSync (webpack:///C:/ng/anbud/~/@angular/compiler/src/runtime_compiler.js:52:0 <- src/test.ts:37888:21) 

कोई भी विचार कैसे रूटिंग के साथ इकाई परीक्षण घटकों के लिए?

+3

मैं तुम्हें यहाँ से https://github.com/angular/angular/blob/951ecb4d9024b6b67a326ef2f04eb58a5190f219/modules/%40angular/router/test/integration.spec.ts#L24 –

उत्तर

29

अंत में इसे ठीक करने में सक्षम था, और यह इस बहुत ही सरल है:

beforeEach(() => addProviders([ 
    { 
     provide: Router, 
     useClass: class { navigate = jasmine.createSpy("navigate"); } 
    }])); 
+2

की तरह कुछ की जरूरत है आप के लिए चमेली उपयोग कर सकते हैं लगता है परिक्षण। 'उम्मीद (router.navigate) .toHaveBeenCalledWith ([ '/ सफलता']);' – GlacialFlames

+4

2.0.0 में यह भी जब यह एक NgModule के प्रदाताओं अनुभाग में जोड़ने से काम करता है: 'प्रदाताओं: [ { प्रदान करते हैं: रूटर , उपयोग क्लास: कक्षा {नेविगेट = jasmine.createSpy ("नेविगेट"); } }] ' – bas

8

कोशिश जोड़ने RouterModule:

import { ROUTER_DIRECTIVES, Router, RouterModule } from '@angular/router'; 

beforeEach(() => { 
     TestBed.configureTestingModule({ 
      providers: [ 
       ... 
       {provide: Router, useClass: RouterModule}, 
     }); 
    }); 
+3

कुछ घटकों के लिए, इस विधि का उपयोग करने से एक त्रुटि हुई" चक्रीय निर्भरता को तुरंत चालू नहीं किया जा सकता है! राउटर ("[ERROR ->]"): ./Dyn[email protected]:-1 में NgModule DynamicTestModule में? हालांकि, @ मास्टरवोक की विधि का उपयोग करके काम किया। – maia

5

मैं ऊपर समाधान के साथ किसी भी नसीब नहीं था। Testing Routed Components

पहले, जो कुछ तरीकों अपने घटक कॉल के साथ एक टोंटदार रूटर बनाने: इसके बजाय, मैं दस्तावेज में दृष्टिकोण की सिफारिश का पालन किया तो

class RouterStub { 
    navigateByUrl(url: string) { 
    return url; 
    } 
} 

, जब अपने परीक्षण मॉड्यूल को विन्यस्त आप निम्नलिखित है:

TestBed.configureTestingModule({ 
    declarations: [HeaderComponent], 
    providers: [ 
    {provide: Router, useClass: RouterStub} 
    ] 
}); 
संबंधित मुद्दे