Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using ts-mockito in angular2 to mock getter

I have a service

@Injectable()
export class MyService {
    private _id: string;
    get id(): string {
        return this._id;
    }
}

And a test for a component, where I want to mock this service:

let myServiceMock = mock<MyService>(MyService);
when(myServiceMock.id).thenReturn('mockId');

TestBed.configureTestingModule({
    imports: [
        MyModule
    ],
    providers: [
        {
            provide: MyService, useValue: instance(myServiceMock)
        }

    ]
});

And when test is running, i get undefined as an id.

Is it possible to mock getters via mockito?

like image 389
Katya Pavlenko Avatar asked Jan 04 '23 12:01

Katya Pavlenko


1 Answers

Looks like it is how TestBed.configureTestingModule works. It redefines all dependencies which are provided as useValue

The solution is using useFactory:

let myServiceMock = mock<myServiceMock>(MyService);
when(myServiceMock.id).thenReturn('mockId');

TestBed.configureTestingModule({
    imports: [
        MyModule
    ],
    providers: [
        {
            provide: MyService, useFactory: () => instance(myServiceMock)
        }

    ]
});
like image 126
Katya Pavlenko Avatar answered Jan 11 '23 16:01

Katya Pavlenko