2014-12-04 2 views
2

Я наследую некоторый код, и у меня есть два их теста, которые все еще терпят неудачу, не уверены, были ли они раньше, или если это потому, что у меня есть другая версия Jasmine (они были предварительно 2,0)Жасмин .toHaveBeenCalledWith (aDate) не работает

тест, который не удается имеет эту установку шпиона в beforeEach

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

Тогда в тесте

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

в результате ошибки вмешивающаяся, потому что они идентичны

Ожидаемое шпионский getImportLogForDate быть вызванным с [ '1', Дата (Чт Dec 04 2014 13:00:51 GMT-0600 (Central Standard Time))] но фактические вызовы были [ «1 ', Дата (Чт. 04 04 2014 13:00:51 GMT-0600 (Время в центральном стандарте))].

Могу ли я проверить, что функции были вызваны с датой?

ответ

3

Что такое PerformActionThatCallsGetImportLogForDate делать с объектом даты? Жасмин сравнивает объекты даты по их миллисекундному значению, поэтому, если он выключен даже на 1 мс, они не будут равны, но вы не увидите этого уровня детализации, просто прочитав вывод консоли.

В качестве альтернативы у вас есть еще 2 варианта.

Просто проверьте, что объект даты использовался в качестве второго аргумента.

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

Проверьте, что значение даты, но за пределы toHaveBeenCalledWith, в случае какого-либо конкретного странности с этим согласованью.

Смежные вопросы