ver tarjeta pro pareja para online hackear gratis espiarwapp espiar espia encuestas credito app javascript unit-testing mocking jasmine

javascript - tarjeta - whatsapp espia chat



Cómo espiar una propiedad de valor(en lugar de un método) con Jasmine (9)

¿Alguna razón por la que no puedes simplemente cambiarla en el objeto directamente? No es como si javascript impusiera visibilidad de una propiedad en un objeto.

El spyOn de Jasmine es bueno para cambiar el comportamiento de un método, pero ¿hay alguna manera de cambiar una propiedad de valor (en lugar de un método) para un objeto? el código podría ser como a continuación:

spyOn(myObj, ''valueA'').andReturn(1); expect(myObj.valueA).toBe(1);


En febrero de 2017, combinaron un RP que agregaba esta característica, lanzada en abril de 2017.

para espiar los getters / setters que usa: const spy = spyOnProperty(myObj, ''myGetterName'', ''get''); donde myObj es su instancia, ''myGetterName'' es el nombre definido en su clase como get myGetterName() {} y el tercer param es el tipo get o set .

Puedes usar las mismas afirmaciones que ya usas con los espías creados con spyOn .

Entonces puedes por ejemplo:

const spy = spyOnProperty(myObj, ''myGetterName'', ''get''); // to stub and return nothing. Just spy and stub. const spy = spyOnProperty(myObj, ''myGetterName'', ''get'').and.returnValue(1); // to stub and return 1 or any value as needed. const spy = spyOnProperty(myObj, ''myGetterName'', ''get'').and.callThrough(); // Call the real thing.

Aquí está la línea en el código fuente de Github donde este método está disponible si está interesado.

https://github.com/jasmine/jasmine/blob/7f8f2b5e7a7af70d7f6b629331eb6fe0a7cb9279/src/core/requireInterface.js#L199

Respondiendo a la pregunta original, con jazmín 2.6.1, usted:

const spy = spyOnProperty(myObj, ''valueA'', ''get'').andReturn(1); expect(myObj.valueA).toBe(1); expect(spy).toHaveBeenCalled();


Estoy usando una grilla de kendo y, por lo tanto, no puedo cambiar la implementación a un método getter, pero quiero probar esto (burlar la grilla) y no probar la grilla en sí. Estaba usando un objeto espía pero esto no es compatible con la burla a la propiedad, así que hago esto:

this.$scope.ticketsGrid = { showColumn: jasmine.createSpy(''showColumn''), hideColumn: jasmine.createSpy(''hideColumn''), select: jasmine.createSpy(''select''), dataItem: jasmine.createSpy(''dataItem''), _data: [] }

Es un poco largo pero funciona una delicia


Jasmine no tiene esa funcionalidad, pero es posible que puedas hackear algo usando Object.defineProperty .

Podrías refactorizar tu código para usar una función getter, y luego espiar el getter.

spyOn(myObj, ''getValueA'').andReturn(1); expect(myObj.getValueA()).toBe(1);


La mejor forma es usar spyOnProperty . Espera 3 propiedades y necesita pasar o set como tercera propiedad.

Ejemplo

const div = fixture.debugElement.query(By.css(''.ellipsis-overflow'')); // now mock properties spyOnProperty(div.nativeElement, ''clientWidth'', ''get'').and.returnValue(1400); spyOnProperty(div.nativeElement, ''scrollWidth'', ''get'').and.returnValue(2400);

Aquí estoy configurando el get del clientWidth del objeto div.nativeElement .


Llego un poco tarde a la fiesta aquí, lo sé, pero

Puede acceder directamente al objeto de llamadas, que puede proporcionarle las variables para cada llamada

expect(spy.calls.argsFor(0)[0].value).toBe(expectedValue)


No puede simular una variable, pero puede crear una función captadora para ella y simular ese método en su archivo de especificación.


Si está utilizando ES6 (Babel) o TypeScript, puede anular la propiedad utilizando get y set accessors.

export class SomeClassStub { getValueA = jasmine.createSpy(''getValueA''); setValueA = jasmine.createSpy(''setValueA''); get valueA() { return this.getValueA(); } set valueA(value) { this.setValueA(value); } }

Luego, en su prueba, puede verificar que la propiedad esté configurada con:

stub.valueA = ''foo''; expect(stub.setValueA).toHaveBeenCalledWith(''foo'');


Supongamos que hay un método como este que necesita pruebas. La propiedad src de la imagen diminuta necesita verificación.

function reportABCEvent(cat, type, val) { var i1 = new Image(1, 1); var link = getABC(''creosote''); link += "&category=" + String(cat); link += "&event_type=" + String(type); link += "&event_value=" + String(val); i1.src = link; }

El spyOn () a continuación hace que la "nueva imagen" se alimente con el código falso de la prueba. El código spyOn devuelve un objeto que solo tiene una propiedad src.

Como la variable "gancho" tiene un alcance para ser visible en el código falso en el SpyOn y también más tarde después de que se llame al "reportABCEvent"

describe("Alphabetic.ads", function() { it("ABC events create an image request", function() { var hook={}; spyOn(window, ''Image'').andCallFake( function(x,y) { hook={ src: {} } return hook; } ); reportABCEvent(''testa'', ''testb'', ''testc''); expect(hook.src). toEqual(''[zubzub]&arg1=testa&arg2=testb&event_value=testc''); });

Esto es para jazmín 1.3 pero podría funcionar en 2.0 si el "andCallFake" se altera al nombre 2.0