tutorial test run princess karma javascript jasmine

javascript - test - ¿Hay alguna forma de verificar el orden de las ejecuciones de espías con Jasmine?



karma js (2)

Hasta ahora lo he estado haciendo de la siguiente manera, pero parece incómodo y no se escalará bien:

obj.spy1.andCallFake(function() { expect(obj.spy2.calls.length).toBe(0); });

Tengo dos objetos que han sido configurados como espías con Jasmine:

spyOn(obj, ''spy1''); spyOn(obj, ''spy2'');

Necesito verificar que las llamadas a spy1 preceden a las llamadas a spy2 . Puedo verificar si se llaman a los dos:

expect(obj.spy1).toHaveBeenCalled(); expect(obj.spy2).toHaveBeenCalled();

pero esto pasará incluso si se llamó primero a obj.spy2() . ¿Hay una forma fácil de verificar que se llamó uno antes que el otro?


Otra alternativa es mantener una lista de llamadas:

var objCallOrder; beforeEach(function() { // Reset the list before each test objCallOrder = []; // Append the method name to the call list obj.spy1.and.callFake(function() { objCallOrder.push(''spy1''); }); obj.spy2.and.callFake(function() { objCallOrder.push(''spy2''); }); });

Lo que le permite verificar el orden de diferentes formas:

Compare directamente a la lista de llamadas:

it(''calls exactly spy1 then spy2'', function() { obj.spy1(); obj.spy2(); expect(objCallOrder).toEqual([''spy1'', ''spy2'']); });

Verifique el orden relativo de algunas de las llamadas:

it(''calls spy2 sometime after calling spy1'', function() { obj.spy1(); obj.spy3(); obj.spy4(); obj.spy2(); expect(obj.spy1).toHaveBeenCalled(); expect(obj.spy2).toHaveBeenCalled(); expect(objCallOrder.indexOf(''spy1'')).toBeLessThan(objCallOrder.indexOf(''spy2'')); });