Общее решение для тестирования частей труднодоступных объектов состоит в том, чтобы перенести их создание на фабрики, например, если у вас есть:
class A {
run() {
const v = new B(x, y);
v.doSomeStuff(z, t);
}
}
вы можете сделать что-то вроде этого:
class A {
constructor(private bFactory) {}
run() {
const v = this.bFactory(x, y);
v.doSomeStuff(z, t);
}
}
и затем в тестах вы можете ввести что-то вроде этого:
const bMock = { doSomeStuff: jasmine.createSpy('doSomeStuff') };
const bFactoryMock = jasmine.createSpy('bFactoryMock').and.return(bMock);
const tested = new A(bFactoryMock);
tested.run():
expect(bFactoryMock).toHaveBeenCalledWith(something, something);
expect(bMock.doSomeStuff).toHaveBeenCalledWith(something, something);