pruebas curso con jasmine protractor

jasmine - curso - qué es() es para y cómo usarlo(transportador, jazmín)



protractor typescript (2)

Aquí hay una muestra describe que puedes ejecutar y ver qué pasa. Debo mencionar que no uso un transportador, por lo que podría haber algunas consideraciones adicionales sobre sus capacidades específicas.

describe(''Done functionality'', function(){ var echoInOneSecond = function(value){ console.log(''creating promise for '', value); return new Promise(function(resolve, reject){ console.log(''resolving with '', value); resolve(value); }); }; it(''#1 this will untruly PASS'', function(){ var p = echoInOneSecond(''value #1''); p.then(function(value){ console.log(''#1 expecting...and value is '', value); expect(value).toBe(''value #1''); }); }); it(''#2 this will NOT FAIL'', function(){ var p = echoInOneSecond(''value #2''); p.then(function(value){ console.log(''#2 expecting... and value is '', value); expect(value).not.toBe(''value #2''); }); }); it(''3 = will truly FAIl'', function(done){ var p = echoInOneSecond(''value #3''); p.then(function(value){ console.log(''#3 expecting... and value is '', value); expect(value).not.toBe(''value #3''); done(); }); }); it(''4 = this will truly PASS'', function(done){ var p = echoInOneSecond(''value #4''); p.then(function(value){ console.log(''#4 expecting... and value is '', value); expect(value).toBe(''value #4''); done(); }); }); });

al ejecutar la prueba, se observará la secuencia: las primeras promesas # 1, # 2, # 3 se crearán y resolverán una por una. Tenga en cuenta que las expectativas para los números 1 y 2 aún no se ejecutarán porque las promesas se resuelven de forma asíncrona.

Luego, dado que los # 3 usos de prueba done , después de que se crea la promesa # 3, se evalúan las funciones de todas las promesas anteriores: verá ''# 1 esperando ...'' y ''# 2 esperando ...'', pero jazmín no les importará porque las pruebas # 1 y # 2 ya están terminadas y todo lo relacionado con ellas está hecho. Solo después de que se produzca esa expectativa # 3 y realmente fallará porque jazmín se ocupa de todo lo que sucede antes de que se done() .

Y luego puedes ver el flujo normal de la prueba n. ° 4 - creando promesas, resolviendo, expectativa, todo lo que jazmín considera, de modo que la expectativa realmente pasará.

it(''should for something'', function check(done) { browser.sleep(2000); $(''.csTx'').isPresent().then(function(result) { if(result) { done(); } else { xPage.clickBack(); check(done); } }) }, 30000);

¿Alguien puede explicar cómo funciona done () y para qué sirve? Lo busqué en Google, pero no puedo encontrar ninguna información que me resulte fácil de entender. Estoy automatizando con transportador y jazmín. por favor considere el código anterior.


Debe usar done si su prueba crea una TaskQueue paralela en el flujo de control de la prueba (lea más sobre las promesas y el flujo de control ).

Por ejemplo:

describe(''Control Flow'', function() { function logFromPromise(text) { var deferred = protractor.promise.defer(); deferred.then(function() { console.log(text); }); deferred.fulfill(); return deferred; } it(''multiple control flows'', function() { setTimeout(function() { logFromPromise(''1''); }); logFromPromise(''0''); }); }

Llamar a setTime crea una cola de tareas paralela en el control:

ControlFlow | TaskQueue | | Task<Run fit("multiple control flows") in control flow> | | | TaskQueue | | | | Task <logFromPromise(''0'');> | TaskQueue | | Task <setTimeout>

Protractor cree que la prueba está "terminada" después de que se imprima 0 . En este ejemplo, 1 probablemente se imprimirá después de que se complete la prueba. Para que el transportador espere la Task <setTimeout> , debe llamar a la función done:

it(''multiple control flows'', function(done) { setTimeout(function() { logFromPromise(''1'').then(function() { done(); }); }); logFromPromise(''0''); });

Si puede, deje que el transportador lo manipule cuando la prueba esté "lista". Tener TaskQueues paralelos puede conducir a condiciones de carrera inesperadas en tu prueba.