如何在jasmine测试中获取事件发射器的参数

时间:2017-10-25 19:51:42

标签: angular typescript karma-jasmine angular2-testing spyon

我有一个单元测试如下

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 / calls'。任何建议??

注意:我不想做

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

因为dataExpected是一个大的json对象。我只关心一个领域。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

这应该有用。

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'并且应该可以工作。

答案 1 :(得分:0)

您也可以使用

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