Angular 测试发射被称为业力不起作用

Angular 测试发射被称为业力不起作用,angular,unit-testing,karma-jasmine,Angular,Unit Testing,Karma Jasmine,我有一个方法,其中应该始终调用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).f

我有一个方法,其中应该始终调用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('应验证变更日期',(完成)=>{
component.dateForm.subscribe(数据=>{
预计(数据日期从).toBe('2020-01-01');
预计(数据日期)。toBe('2020-11-11');
完成();
});
组件.dateFromControl.patchValue('01-01-2020');
组件日期控制补丁值('11-11-2020');
component.changeDate();
});

通过这种方式,您不仅可以测试输出是否已被调用,还可以测试数据是否正确。

首先,您可以在采取操作后进行监视。但是假设你说的是@Output,有比检查调用的emit方法更好的方法来测试它,例如@jornsharpe它不是一个输出,但是是的,我在函数之前没有调用spy。。。我讨厌星期一。谢谢尽管如此,监视你应该测试的东西的一部分是一种气味,想想你还能如何断言结果。@jonrsharpe我知道你是从哪里来的,上面的代码是整个方法的简化版本,与我所面临的问题相关。谢谢你的关心!