I created an ApiService
class to be able to handle our custom API queries, while using our own serializer + other features.
ApiService
's constructor signature is:
constructor(metaManager: MetaManager, connector: ApiConnectorService, eventDispatcher: EventDispatcher);
MetaManager
is an injectable service that handles api's metadatas.ApiConnectorService
is a service which is wrapping Http
to add our custom headers and signature system.EventDispatcher
is basically Symfony's event dispatcher system, in typescript.When I test the ApiService
, I do an initialization in beforeEach
:
beforeEach(async(() => { TestBed.configureTestingModule({ imports : [ HttpModule ], providers: [ ApiConnectorService, ApiService, MetaManager, EventDispatcher, OFF_LOGGER_PROVIDERS ] }); }));
and it works fine.
Then I add my second spec file, which is for ApiConnectorService
, with this beforeEach
:
beforeEach(async(() => { TestBed.configureTestingModule({ imports : [HttpModule], providers: [ ApiConnectorService, OFF_LOGGER_PROVIDERS, AuthenticationManager, EventDispatcher ] }); }));
And all the tests fail with this error:
Error: Can't resolve all parameters for ApiService: (MetaManager, ?, EventDispatcher).
api-connector-service.spec.ts
(ApiConnectorService
's spec file) from my loaded tests, ApiService
's tests will succeed.api-service.spec.ts
(ApiService
's spec file) from my loaded tests, ApiConnectorService
's tests will succeed.Why do I have this error? It seems like the context between my two files are in conflict and I don't know why and how to fix this.
Then you could get an error like EXCEPTION: Can't resolve all parameters for MyComponent: (?). The same error can happen due to a circular dependency which causes an undefined service import.
'Can't resolve all parameters for Router: (?, ?, ?, ?, ?, ?, ?)' Fortunately resolving this particular error is fairly straightforward as we have 2 available solutions to choose from... The first approach to fixing this issue is to simply create a mock class that simulates the Angular Router module and its methods.
In case anyone gets here AND you're using Jest to test your Angular app (hopefully we're a growing minority), you will run into this error if you are not emitting decorators. You'll need to update your tsconfig.spec.json file so it looks like:
In case anyone gets here AND you're using Jest to test your Angular app (hopefully we're a growing minority), you will run into this error if you are not emitting decorators ("emitDecoratorMetadata":true
). You'll need to update your tsconfig.spec.json
file so it looks like:
{ "extends": "../../tsconfig.json", "compilerOptions": { "emitDecoratorMetadata": true, "outDir": "../../out-tsc/spec", "types": [ "jest", "node" ] }, "files": [ ], "include": [ "**/*.spec.ts", "**/*.d.ts" ] }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With