Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?) in Angular RC 5 when unit testing

I just upgraded to Angular RC 5 and now all component that uses 'ROUTER_DIRECTIVES' fails with 'Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?)' when I try to unit test the component.

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

The full error log:

     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) 

Any ideas how to unit test components with routing?

like image 500
ganjan Avatar asked Aug 18 '16 10:08

ganjan


People also ask

What is TestBed in unit testing?

TestBed is the primary api for writing unit tests for Angular applications and libraries.

How to register Router in Angular?

Register Router and Routes link To use the Router , you must first register the RouterModule from the @angular/router package. Define an array of routes, appRoutes , and pass them to the RouterModule. forRoot() method. The RouterModule.


1 Answers

Was finally able to fix it, and it was as simple as this:

beforeEach(() => addProviders([     {          provide: Router,          useClass: class { navigate = jasmine.createSpy("navigate"); }     }])); 
like image 194
ganjan Avatar answered Sep 23 '22 05:09

ganjan