Sto riscontrando qualche problema nell'iniettare una simulazione per una dipendenza RouteParams in un test per un componente Angular2. Il mio pensiero generale è che potrebbe mancare qualche fornitore.Angular2 - Route mockingParams in prova
I test falliscono con:
Cannot resolve all parameters for 'RouteParams'(?). Make sure that all the parameters are decorated with Inject or have valid type annotations and that 'RouteParams' is decorated with Injectable.
Qualcuno sa che il problema potrebbe essere?
import {
it,
inject,
injectAsync,
describe,
beforeEach,
beforeEachProviders,
TestComponentBuilder
} from 'angular2/testing';
import {Component, provide} from 'angular2/core';
import {BaseRequestOptions, Http} from 'angular2/http';
import {MockBackend} from 'angular2/http/testing';
import {RouteParams, ROUTER_PROVIDERS, ROUTER_PRIMARY_COMPONENT} from 'angular2/router';
// Load the implementations that should be tested
import {Home} from './home';
import {Title} from './providers/title';
describe('Home',() => {
// provide our implementations or mocks to the dependency injector
beforeEachProviders(() => [
Title,
Home,
provide(RouteParams, { useValue: new RouteParams({ id: '1' }) }),
BaseRequestOptions,
MockBackend,
provide(Http, {
useFactory: function(backend, defaultOptions) {
return new Http(backend, defaultOptions);
},
deps: [MockBackend, BaseRequestOptions]
}),
provide(RouteParams, {
useFactory: function() {
return new RouteParams({ 'id':'1' });
}
})
]);
it('should have a title', inject([ Home ], (home) => {
expect(home.title.value).toEqual('Angular 2');
}));
it('should have a http', inject([ Home ], (home) => {
expect(!!home.http).toEqual(true);
}));
it('should log ngOnInit', inject([ Home ], (home) => {
spyOn(console, 'log');
spyOn(console, 'info');
expect(console.log).not.toHaveBeenCalled();
expect(console.info).not.toHaveBeenCalled();
home.ngOnInit();
expect(console.log).toHaveBeenCalled();
expect(console.info).toHaveBeenCalledWith('1');
}));
});
Grazie! Questo ha funzionato alla grande. – Charlie