Tengo la siguiente prueba en un angular (4) -
it('should call service', async(inject([CommentTableComponent], (cmp: CommentTableComponent) => { spyOn(mockSock, 'getComments').and.callThrough(); cmp.ngOnInit(); expect(mockSock.getComments).toHaveBeenCalledWith('api/jobs/604', moment()); })));que arroja el error:
Se esperaba que se llamara a getComments espía con [ 'api/jobs/604', sábado 29 de abril de 2017 12:31:07 GMT+0100 ] pero las llamadas reales fueron [ 'api/jobs/604', sábado 29 de abril de 2017 00:00 :00 GMT+0100, sábado 29 de abril de 2017 12:31:07 GMT+0100].
Como estas cadenas son claramente idénticas, supongo que esto se debe a que el valor de prueba de ahora es varios milisegundos más tarde que el valor cuando el componente se estaba ejecutando y los milisegundos no se analizan en la cadena.
Entonces, mi pregunta es, ¿cómo puedo hacer que mi prueba funcione? ¿Hay alguna manera de verificar que el parámetro llamado esté dentro de x milisegundos de la hora actual?
Prueba esto:
var spy = spyOn(mockSock, 'getComments').and.callThrough(); var today = moment('2017-4-29').toDate(); jasmine.clock().mockDate(today); expect(spy.calls.mostRecent().args[0]).toEqual('api/jobs/604'); expect(spy.calls.mostRecent().args[1].valueOf()).toEqual(today.valueOf());Referencia: https://jasmine.github.io/2.5/introduction.html#section-Jasmine_Clock