测试 emit 在 karma 中被调用不工作

testing emit to have been called in karma not working

我有一个应该始终调用 emit 事件的方法:

changeDate() {
  let dateFrom = moment(this.dateFromControl.value, 'YYYY-MM-DD');
  let dateTo = moment(this.dateToControl.value, 'YYYY-MM-DD');
  const formDate = {
    dateFrom: moment(dateFrom).isValid() ? moment(dateFrom).format('YYYY-MM-DD') : '',
    dateTo: moment(dateTo).isValid() ? moment(dateTo).format('YYYY-MM-DD') : ''
  }
  this.dateForm.emit(formDate);
}

这是对它的测试:

it('should validate changeDate', (done) => {
  component.dateFromControl.patchValue('01-01-2020');
  component.dateToControl.patchValue('11-11-2020');

  component.changeDate();
  spyOn(component.dateForm, 'emit');
  expect(component.dateForm.emit).toHaveBeenCalled();
  done();

});

我收到预期的 spy emit 已被调用,我想知道出了什么问题。

尝试改为订阅输出:

it('should validate changeDate', (done) => {
  component.dateForm.subscribe(data => {
    expect(data.dateFrom).toBe('2020-01-01');
    expect(data.dateTo).toBe('2020-11-11');

    done();
  });

  component.dateFromControl.patchValue('01-01-2020');
  component.dateToControl.patchValue('11-11-2020');
  component.changeDate();
});

这样您不仅测试输出已被调用而且数据正确。