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.