【发布时间】:2021-03-24 21:24:50
【问题描述】:
我有这个方法应该总是调用发出事件:
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 已被调用,我想知道出了什么问题。
【问题讨论】:
-
一方面,您在采取行动之后 进行间谍活动。但是假设您正在谈论一个 @Output ,那么测试它的方法比检查调用的发出方法要好得多,请参见例如stackoverflow.com/a/62871934/3001761
-
@jonrsharpe 这不是一个输出,但是是的,我没有在函数之前调用间谍......我讨厌星期一。谢谢!
-
不过,窥探你应该测试的部分东西是一种气味,想想你还能如何断言结果。
-
@jonrsharpe 我知道您来自哪里,上面的代码是与我面临的问题相关的整个方法的简化版本。感谢您的关注!
标签: angular unit-testing karma-jasmine