测试 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();
});
这样您不仅测试输出已被调用而且数据正确。
我有一个应该始终调用 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();
});
这样您不仅测试输出已被调用而且数据正确。