Ich habe Probleme, einen Mock für eine RouteParams-Abhängigkeit in einen Test für eine Angular2-Komponente einzufügen. Mein allgemeiner Gedanke ist, dass mir einige Anbieter fehlen könnten.Angular2 - verspottete RouteParams im Test
die Tests fehlschlagen mit:
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.
Weiß jemand, was das Problem sein könnte?
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');
}));
});
Danke! Das hat super funktioniert. – Charlie