【问题标题】:Unit Testing A Moment Date - Memory Address Issues?单元测试时刻日期 - 内存地址问题?
【发布时间】:2018-11-30 11:59:00
【问题描述】:

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

【问题讨论】:

    标签: javascript angular unit-testing momentjs


    【解决方案1】:

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

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

    改用这个:

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

    【讨论】:

    • 你好 trichetriche,我之前也有同样的想法,但我发现测试每次都通过了
    • 嗯,这就是目的......当参数匹配时它起作用(这种情况),当参数不匹配时它不起作用(你的情况)。这是为了防止副作用。
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2017-03-06
    • 2021-11-09
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多