philip mercadotecnia marketing libro kotler diccionario string numbers compare jasmine protractor

string - marketing - diccionario de mercadotecnia philip kotler pdf



Transportador comparador de nĂºmeros de cuerda (3)

Hoy me he enfrentado al problema interesante de crear pruebas para un comportamiento bastante simple: clasificación ''más reciente'' . Todo lo que la prueba necesita saber:

  1. Cada artículo tiene ID
  2. La ID anterior es menor que la siguiente en este caso de clasificación

Enfoque : escribir ID en el atributo del artículo, obtener ese ID del primer artículo con getAttribute() y de cualquier forma por segundo.

Problema : getAttribute() promesa que resulta con valor de cadena y Jasmine no puede comparar (a partir de la caja) números de cadena.

Me gustaría encontrar una manera elegante de compararlos con toBeLessThan() lugar de usar cadenas de pocos .then() que se terminará con la comparación de esas cosas.

La raíz del mal de definición sin tipo

Gracias chicos <3


Puede crear una función de ayuda para convertir el número de serie al número real, que hará uso de promesas:

function toNumber(promiseOrValue) { // if it is not a promise, then convert a value if (!protractor.promise.isPromise(promiseOrValue)) { return parseInt(promiseOrValue, 10); } // if promise - convert result to number return promiseOrValue.then(function (stringNumber) { return parseInt(stringNumber, 10); }); }

Y luego usa el resultado con .toBeLessThan , etc.

expect(toNumber(itemId)).toBeLessThan(toNumber(anotherItemId));


Una opción para abordarlo con un matcher de jazmín personalizado :

toBeSorted: function() { return { compare: function(actual) { var expected = actual.slice().sort(function (a, b) { return +a.localeCompare(+b); }); return { pass: jasmine.matchersUtil.equals(actual, expected) }; } }; },

Aquí, el matcher toma una matriz de entrada real, la ordena y la compara con la matriz de entrada.

Uso:

expect(element.all(by.css(".myclass")).getAttribute("id")).toBeSorted();

Tenga en cuenta que aquí estamos llamando a getAttribute("id") en un ElementArrayFinder que se resolvería en una matriz de valores de atributos id . expect() sí mismo está parcheado para resolver implícitamente las promesas.


Olvidé la naturaleza nativa de las promesas, pero antes de Michael Radionov recordé lo que quería hacer.

expect(first.then( r => Number(r) )).toBe(next.then( r => Number(r) ));

Supongo que este trazo parece simple.

ACTUALIZAR

ES6:

it(''should test numbers'', async function () { let first = Number(await $(''#first'').getText()); let second = Number(await $(''#second'').getText()); expect(first).toBeGreaterThan(second); })