tutorial test run nodejs karma javascript unit-testing jasmine

javascript - test - ¿Alguna forma de modificar a los espías de Jasmine en base a argumentos?



nodejs test (2)

También podría usar $provide para crear un espía. Y and.returnValues uso de and.returnValues lugar de and.returnValue para pasar los datos parametrizados.

Según los documentos de Jasmine: encadenando el espía con and.returnValues , todas las llamadas a la función devolverán valores específicos en orden hasta que llegue al final de la lista de valores de retorno, en cuyo punto volverá a ser indefinido para todas las llamadas posteriores.

describe(''my fn'', () => { beforeEach(module($provide => { $provide.value(''externalApi'', jasmine.createSpyObj(''externalApi'', [''get''])); })); it(''get userName and Id'', inject((externalApi) => { // Given externalApi.get.and.returnValues(''abc'',''123''); // When //insert your condition // Then // insert the expectation })); });

Tengo una función que me gustaría probar que llama a un método API externo dos veces, usando diferentes parámetros. Me gustaría burlar esta API externa con un espía de Jasmine y devolver cosas diferentes según los parámetros. ¿Hay alguna forma de hacer esto en Jasmine? Lo mejor que se me ocurre es un truco usando andCallFake:

var functionToTest = function() { var userName = externalApi.get(''abc''); var userId = externalApi.get(''123''); }; describe(''my fn'', function() { it(''gets user name and ID'', function() { spyOn(externalApi, ''get'').andCallFake(function(myParam) { if (myParam == ''abc'') { return ''Jane''; } else if (myParam == ''123'') { return 98765; } }); }); });


callFake es el camino correcto, pero puedes simplificarlo usando un objeto para mantener los valores de retorno

describe(''my fn'', function() { var params = { ''abc'': ''Jane'', ''123'': 98765 } it(''gets user name and ID'', function() { spyOn(externalApi, ''get'').and.callFake(function(myParam) { return params[myParam] }); }); });

Dependiendo de la versión de Jasmine, la sintaxis es ligeramente diferente:

  • 1.3.1: .andCallFake(fn)
  • 2.0: .and.callFake(fn)

Recursos: