5

以下のような単体テストがあります

it('billing information is correct', () => {
    fixture.detectChanges();
    spyOn(component.myEventEmitter, 'emit').and.callThrough();
    component.form.controls['size'].setValue(12);
    fixture.detectChanges();
    **let args= component.myEventEmitter.emit.mostRecentCall **
    expect(args.billingSize).toEqual('30')
});

サイズが変更されると、myEventEmitter は、billingSize を含む大きな json オブジェクトとともに出力されます。そして、この値が期待どおりかどうかをテストで確認したいと思います。しかし、イベント エミッターで「mostRecentCall/ 呼び出し」を実行できないようです。助言がありますか??

注:やりたくない

 expect(component.myEventEmitter.emit).toHaveBeenCalledWith(*dataExpected*);

dataExpected は大きな json オブジェクトであるためです。1つのフィールドだけを気にします。どんな助けでも大歓迎です。

4

2 に答える 2

6

これはうまくいくはずです。

it('billing information is correct', () => {
  fixture.detectChanges();
  spyOn(component.myEventEmitter, 'emit').and.callThrough();
  component.form.controls['size'].setValue(12);
  fixture.detectChanges();
  let arg: any = (component.myEventEmitter.emit as any).calls.mostRecent().args[0];
  expect(arg.billingSize).toEqual('30');
});

ノート:

 component.myEventEmitter.emit.calls.mostRecent() 

- コンパイルされません (エラー: タイプ ..' に呼び出しが存在しません) ので、'any' と入力してください。

于 2017-10-25T21:20:54.957 に答える
0

使用することもできます

 expect(component.myEventEmitter.emit).toHaveBeenCalledWith('eventName', 
  jasmine.objectContaining(*dataExpected*)
);

于 2017-10-27T00:35:03.043 に答える