首页 > 解决方案 > 单元测试时刻日期 - 内存地址问题?

问题描述

问题?我正在尝试测试一种使用 moment.subtract() 方法的方法,该方法从当前日期开始计算 1 天。首先,Moment 提供给我们的减法只是对日期进行操作,并没有创建新的日期,所以没有新的内存地址位置。尝试测试此方法时,我收到以下预期错误:

[ Wed Jun 20 2018 09:14:52 GMT+0100 ] but actual calls were [ Wed Jun 20 2018 09:14:52 GMT+0100 ]

很奇怪吧?

我唯一能想到的是在我的代码中某处日期参考正在改变。我也会将我的代码放在下面的单元测试中

public prevDate = () => {
  this.datePickerService.changeDate(this.date.subtract(1, 'day'));
}

ngOnInit() {
  this.date = this.datePickerService.date; // Is this the problem?
}

单元测试:

describe('When the prevDate method is called', () => {
   setupComponent();

   it('should show yesterdays date', () => {
     spyOn(datePickerService, 'changeDate');
     datePickerService.date = moment();
     component.prevDate();
 expect(datePickerService.changeDate).toHaveBeenCalledWith(datePickerService.date.add(-1, 'days'));
    });
  });

标签: javascriptangularunit-testingmomentjs

解决方案


您的测试没有通过,因为您没有使用相同的参数:

this.datePickerService.changeDate(this.date.subtract(1, 'day'));
------------
.toHaveBeenCalledWith(datePickerService.date.add(-1, 'days'))

改用这个:

.toHaveBeenCalledWith(component.date.subtract(1, 'day'))

推荐阅读