How to Cast an Injected Service as a Mock in Angular Unit Tests

I've been meaning to write this for a while. Normally in my Angular unit tests, I set up my service mocks and then let dependency injection treat them as if they're the real thing. But sometimes you'll need to cast a service mock as a spy so you can do things like reset the calls it's made. And it's one of those things I always have to think back and remember "How did I do that last time?".

Here's an example of how:

const mockScoreAdminService = TestBed.inject(ScoreAdminService) as jasmine.SpyObj<ScoreAdminService>;

mockScoreAdminService.processScores.calls.reset();

This code casts the service mock, which is treated as the real service type, to a Jasmine spy object. It then resets the calls made to the processScores method to zero.

I hope this helps someone!

Comments

Popular Posts

The Cause and Solution for the "System.Runtime.Serialization.InvalidDataContractException: Type 'System.Threading.Tasks.Task`1[YourTypeHere]' cannot be serialized." Exception

How to Get Norton Security Suite Firewall to Allow Remote Desktop Connections in Windows

How to Determine if a Column Exists in a DataReader

Resolving the "n timer(s) still in the queue" Error In Angular Unit Tests

Setting Default Values in an Angular Reactive Form