I know how to work with mocked services injected into a Component, if I am testing the Component. But if I am testing a Service that injects a SubService, I only need
const testedService = new Service(mockSubService);
Is there a way to use ng-mocks to get a mock of the SubService, ideally with all MockInstance effective ?
I have tried various variants of code like this:
MockInstance(SubService, 'someProperty', () => 10, 'get');
MockBuilder().mock(SubService);
const mockSubService = TestBed.inject(SubService);
or this:
MockBuilder().mock(SubService, {someProperty: 10});
const mockSubService = TestBed.inject(SubService);
but in both cases, "someProperty" is not mocked - the actual SubService implementation is returned by TestBed.
I have a feeling I am missing something very simple about ng-mocks, but the online help is a bit confusing. I also know of MockService, but apparently that's not supposed to be used in cases like mine, and also it doesn't set up spies.
It sounds like you need
MockService
andMockProvider
.What you describe is covered in
ng-mocks
documentation about how to test providers with dependencies.If you need spies, you can use
jasmine.createSpy().and.returnValue('mock2')
instead of() => 'mock2'
.