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

kninwzqo  于 2023-06-24  发布在  TypeScript
关注(0)|答案(2)|浏览(148)

我有一个如下的单元测试

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对象。我只关心一个领域。

5m1hhzi4

5m1hhzi41#

这个应该能用

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

j5fpnvbx2#

您还可以使用

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

相关问题