как проверить setTimeout в этих функциях? - PullRequest
1 голос
/ 05 июня 2019

У меня есть функция (в node.js), которая вызывает другую функцию setTimeout.И мне нужно проверить с помощью jasmine, если функция setTimeout была вызвана, но я не знаю, как это сделать

Я ожидаю проверить вызов функции setTimeout с помощью jasmine

  const genOfGrid = (ctx, grid) => {
   ctx.clearRect(0, 0, fieldSize, fieldSize);
   drawGrid(ctx, grid);
   const gridOfNextGeneration = NextGeneration(grid);
   //These is the function i want to test
   setTimeout(() => {
     requestAnimationFrame(() => genOfGrid(ctx, gridOfNextGeneration));
    }, 1000 / 10);
 };

//These is the test implementation but It doesn't work

describe("Test settTimeout in genOfGrid", function() {
  let timerCallback;
  beforeEach(function() {
   timerCallback = jasmine.createSpy("timerCallback");
   jasmine.clock().install();
  });
  afterEach(function() {
   jasmine.clock().uninstall();
 });
fit("causes a timeout to be called synchronously", function() {
   setTimeout(function() {
   timerCallback();
   }, 100);
   expect(timerCallback).toHaveBeenCalled();
 });
 });

1 Ответ

0 голосов
/ 19 июня 2019

Не уверен, поможет ли это вам, но если вы хотите проверить генератор genOfGrid, вы можете попробовать это:

// we need all those dependencies as injections so we can mock them
const genOfGridFactory = (drawGrid, NextGeneration, fieldSize, requestAnimationFrame) => (ctx, grid) => {
  ctx.clearRect(0, 0, fieldSize, fieldSize);
  drawGrid(ctx, grid);
  const gridOfNextGeneration = NextGeneration(grid);
  //These is the function i want to test
  setTimeout(() => {
    requestAnimationFrame(() => genOfGrid(ctx, gridOfNextGeneration));
  }, 1000 / 10);
};
it('causes a timeout to be called synchronously', () => {
  const requestAnimationFrameMock = jasmine.createSpy('requestAnimationFrame').and.callFake((cb) => cb()); // instant execution
  const genOfGrid = genOfGridFactory(
    drawGridStub,
    NextGenerationMock,
    fieldSizeStub,
    requestAnimationFrameMock
  )// setup them as you wish
  const spy = spyOn(genOfGrid);
  const ctxStub = ...;
  genOfGrid(ctxStub, gridStub, NextGenerationMock);
  jasmine.clock().tick(1000/10);// progress enough time to trigger setTimeout requestAnimationFrameMock will trigger its interior immediately
  expect(spy).toHaveBeenCalledWith(ctxStub, NextGenerationMock(gridStub));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...