我正在继承一些代码,并且我有两个测试仍然失败,不确定它们是否在以前,或者是因为我使用的Jasmine版本不同(它们是2.0之前的版本)

失败的测试在beforeEach中具有此间谍设置

spyOn(datacontext, 'getImportLogForDate').and.callThrough();


然后在测试

controller.DepositDate = new Date();
controller.PerformActionThatCallsGetImportLogForDate();
expect(context.getImportLogForDate).toHaveBeenCalledWith('1', controller.DepositDate);


产生的错误令人困惑,因为它们是相同的

预期的间谍getImportLogForDate已使用['1',Date(2014年12月4日星期四13:00:51 GMT-0600(中部标准时间))调用,但实际调用是['1',Date(2014年12月4日星期四13) :00:51 GMT-0600(中部标准时间))。

我可以不验证是否已使用日期调用函数吗?

最佳答案

PerformActionThatCallsGetImportLogForDate如何处理日期对象?茉莉花会比较日期对象的毫秒值,因此即使偏移1毫秒也不会相等,但是您仅通过读取控制台输出就不会看到详细程度。

另外,您还有2个其他选择。

只需测试将日期对象用作第二个参数即可。

expect(context.getImportLogForDate)
    .toHaveBeenCalledWith('1', jasmine.any(Date));


测试该日期值,但在toHaveBeenCalledWith之外,以防该匹配器出现某些特定问题。

expect(context.getImportLogForDate.calls.mostRecent().args[0])
    .toEqual('1');
expect(context.getImportLogForDate.calls.mostRecent().args[1])
    .toEqual(controller.DepositDate);

10-06 01:02