Obj.Obj2.func().func2()みたいな多重構造にSpyしたい場合


Jasmine3.3

当たり前のやり方だけど、何回も混乱したのでメモ
ServiceのPropertyにSpyする場合。

test.service.ts
export class TestService {
  obj: Something

  test() {
    obj.obj2.func().func2();
  }
}
test.service.spec.ts

describe('TestService', () => {
let testService: TestService();

  beforeEach(() => {
    testService = new TestService(); //サービスの初期化
    let testSpy: any = testService;
  });

  it('test') () =>{

    const func2Obj = jasmine.createSpyObj('Ethereum', ['func2']);
    func2Obj.func2.and.returnValue(/* 任意の処理 */);

    const funcObj = jasmine.createSpyObj('Func', ['func']);
    funcObj.func.and.returnValue(func2Obj); // func2をリターン

    testSpy.obj = {obj2: funcObj} //funcObjを持つobj2を持つオブジェクトを挿入

    testSpy.test();
  });
});