单元测试的关键时刻-内存地址有问题吗?

时间:2018-06-21 08:18:40

标签: javascript angular unit-testing momentjs

有问题吗? 我正在尝试测试一种使用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'));
    });
  });

1 个答案:

答案 0 :(得分:0)

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

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

改用它:

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