Angular 测试发射被称为业力不起作用
我有一个方法,其中应该始终调用emit事件: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
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我知道你是从哪里来的,上面的代码是整个方法的简化版本,与我所面临的问题相关。谢谢你的关心!