JEST limity czasu, gdy próbuje przetestować z jaśminowym-pit

głosy
1

Próbuję użyć żartem uruchomić mały test przed kątowym UI ale ja dostaję czas, po upływie 5 sekund. Tu jest mój kodu:

jest.autoMockOff();

require('../../../../bower_components/angular/angular');
require('../../../../bower_components/angular-mocks/angular-mocks');

window.Event = {};

describe('about', function(){

   var mockScope;

   pit('updates the view ', function(done){
        return runTest()
       .then(function(){
           var $ = require('../../../../bower_components/jquery/dist/jquery');
           expect($(#about-div).text()).toEqual('fred');  
       });
    });

    function runTest() {
       var q = require('../../../../bower_components/q/q');
       var defer = q.defer();

       require('../../../../app/scripts/app');
       require('../../../../app/scripts/controllers/about');

       angular.mock.module('app');
       inject(function($rootScope, $controller){
          mockScope = $rootScope.$new();
          controller = $controller('aboutController', {$scope: mockScope});
       });

       document.body.innerHTML =
            '<html>' +
            '   <body>' +
            '      <div ng-controller=aboutController>' +
            '         <div id=about-div >`firstName`</div>' +
            '      </div>' +
            '   </body>' + 
            '</html>';

       setTimeout(function() { defer.resolve(); }, 1000);

       return defer.promise;
   };
});

Używam pit więc mogę mieć 1 sekundowe opóźnienie, aby umożliwić kątowe zaktualizować widok, ale wydaje się, że anonimowy funkcji w setTimeout nigdy nie jest wywoływana. Obietnica nie zostanie spełniony, a czasy przetestować. Jak żartem wykorzystuje Jasmine 1.3.0 Próbowałem zostały również za pomocą przebiegów () i waitsFor (), ale pojawia się ten sam wynik.

Utwórz 05/03/2015 o 09:16
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
2

Walcząc to też, ale rozwiązać go w moim przypadku. Kluczowym problemem jest to, że JEST hijacks swoje czasomierze i umieszcza je w kolejce, które nigdy nie zostanie wykonane, chyba jawnie zrobić.

spróbuj zmienić

return runTest()
.then(..

do

queued = runTest(); // run it... jest will hijack your internal timer
jest.runAllTimers(); // kick the timer to get it unstuck...
return queued.then(... // return the promise, having forced the internal timers to run

Właściwie, to nie tak, że to polecenie (jest.runAllTimers) rozpocznie liczniki, to nic, że to będzie działać, co jest w środku zegara - tak pominąć oczekujące, które mogą być miły dla dokonywania testy zakończą się szybciej.

przydatne tło można znaleźć tutaj: https://facebook.github.io/jest/docs/timer-mocks.html#content

i tutaj: https://facebook.github.io/jest/docs/api.html#jest-runalltimers

Odpowiedział 24/09/2015 o 03:09
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more