javascript meteor jasmine velocity

javascript - ¿Meteor Velocity con Jasmine no regresando esperando el resultado?



(1)

Mantener la reactividad bajo control.

Primero debes entender cómo funciona la reactividad y Meteor. El componente que gestiona la reactividad se llama Rastreador (anteriormente Deps). Puedes leer cómo funciona en el Manual de Meteor .

Cada vez que desencadena una acción que provocará un comportamiento reactivo y desea probar el resultado del comportamiento reactivo, debe llamar a Tracker.flush() después de activar la acción. Esto asegurará que todos los cambios reactivos se apliquen antes de evaluar sus expectativas.

¿Cuándo se Tracker.flush() una llamada Tracker.flush() ? (lista incompleta)?

  • Después de renderizar plantillas con Blaze.render y Blaze.renderWithData
  • Después de activar eventos DOM
  • Después de cambiar los datos en colecciones

Si sus expectativas fallan y usted ha verificado manualmente que el comportamiento probado funciona, puede intentar insertar un Tracker.flush antes de sus expectativas.

Para tu ejemplo esto debería hacerlo:

beforeAll(function () { var self = this; self.deferAfterFlush = function (callback) { Tracker.afterFlush(function () { Meteor.defer(callback); }); }; }); // Guarantee that tests don''t run in a ongoing flush cycle. beforeEach(function (done) { this.deferAfterFlush(done); }); it("should show one less person if you tap you liked them", function() { var personLength = $(''.person'').length; console.log(personLength); #> 7 $("[data-action=like]").first().click(); Tracker.flush(); console.log($(''.person'').length); #> 6 console.log(Likes.find().fetch()); #> 1 expect($(''.person'').length).toEqual(person-1); #> Pass (expected 6 to equal 6) });

Estoy tratando de probar lo siguiente que funciona manualmente:

  1. Devuelve una lista de usuarios como <div>
  2. Haga clic en un botón para reducir ese conteo de <div> en uno.

Esto no parece estar funcionando:

it("should show one less person if you tap you liked them", function() { var personLength = $(''.person'').length; console.log(personLength); #> 7 $("[data-action=like]").first().click(); console.log($(''.person'').length); #> 7 console.log(Likes.find().fetch()); #> 1 expect($(''.person'').length).toEqual(person-1); #> Fail (expected 7 to equal 6) });

Estoy confundido sobre por qué hace esto. Claramente obtengo el resultado esperado al probar manualmente.

Creo que me falta alguna forma de reiniciar esa prueba para ver el DOM de nuevo o algo así. Tal vez algún método asíncrono para devolver la llamada? No estoy seguro pero parece un simple error.