javascript - locators - Cómo esperar un conteo dinámico de elementos en las pruebas e2e utilizando Protractor
protractor tutorial español (2)
Mientras se usa chai
para afirmaciones, hay chai-as-promised
que permite hacer frente a las promesas de una manera más legible. Para que funcione debes primero declarar:
var chai = require(''chai'');
var chaiAsPromised = require(''chai-as-promised'');
chai.use(chaiAsPromised);
y luego en el código:
// here is modified remaind of the code from the original question:
it(''should display a new item in list'', function() {
addItemButton.click();
expect(items.count()).should.eventually.equal(startCount+1);
});
Actualmente estoy escribiendo algunas pruebas e2e para mi humilde aplicación angular con Protractor.
Mi aplicación funciona bien, las pruebas unitarias pasan todo, e2e también se usa ... hasta este:
appE2ESpec.js
describe(''adding an item'', function() {
var items,
addItemButton,
startCount;
beforeEach(function() {
items = element.all(by.css(''li.item''));
addItemButton = element(by.id(''addItemButton''));
startCount = items.count();
});
it(''should display a new item in list'', function() {
addItemButton.click();
expect(items.count()).toEqual(startCount+1);
});
});
Así es como habría escrito mi prueba pero,
El problema es: que items.count () devuelve una promesa, lo sé , pero no puedo lograr que el Transportador lo resuelva. Así que entiendo esto:
Failures:
1) myApp adding an item should display a new item in list
Message:
Expected 6 to equal ''[object Object]1''.
Lo que he intentado:
items.count().then(function(count) {
startCount = count;
//console.log(startCount) --> "6" Perfect!
});
Pero obtuve el mismo resultado al final ... No puedo poner la expect
en el then
, también pensé en eso.
- Busqué en el repositorio de Protractor GitHub, StackOverflow y el grupo Google AngularJs.
Apéndice:
console.log(startCount)
produce esto:
{ then: [Function: then],
cancel: [Function: cancel],
isPending: [Function: isPending] }
Podría haber escrito .toEqual(6)
pero no quiero volver a escribir mi prueba cada vez que necesito cambiar el estado de inicio de mi aplicación.
¿Alguna idea? ¡¡Gracias por adelantado!!
Necesitas resolver la promesa y luego hacer la afirmación.
El transportador resolverá la promesa que pasa a expect (), pero no puede agregar un número a la promesa. Primero debe resolver el valor de la promesa:
beforeEach(function() {
...
items.count().then(function(originalCount) {
startCount = originalCount;
});
});
it(''should display a new item in list'', function() {
...
expect(items.count()).toEqual(startCount+1);
});