Поставить лимит времени на тест Jest? - PullRequest
1 голос
/ 28 мая 2019

Я запускаю ряд тестов с Jest, чтобы продемонстрировать Big O, используя два разных метода для Фибоначчи.

const fastFib = require('./../fastFib');
const slowFib = require('./../slowFib');

test('Fast way of getting Fibonacci of 44', () => {
  expect(fastFib(44)).toBe(701408733);
});

test('Slow way of getting Fibonacci of 44', () => {
  expect(slowFib(44)).toBe(701408733);
});

Мне интересно, есть ли способ указать максимальную длину теста?Я видел, что вы можете передать третью переменную для асинхронного тайм-аута, но это, похоже, не влияет на нормальные функции:

test('Slow way of getting Fibonacci of 44', () => {
  expect(slowFib(44)).toBe(701408733);
}, 5000);

Есть ли способ указать максимальное время выполнения для функции сJest?


Я поделюсь slowFib.js для справки:

function fib(n) {
  return (n<=1) ? n : fib(n - 1) + fib(n - 2);
}

module.exports = fib;

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

так что ваш тест приостанавливается из-за выполнения синхронизации - нет способа прервать это по таймауту.Вам нужно «разделить исполнение».Следующая версия мне не подходит:

test('Slow way of getting Fibonacci of 44', (done) => {
  expect(slowFib(44)).toBe(701408733);
  setTimeout(done, 10); // smallest timeout possible to make different macrotask
}, 5000);

PS Я также считаю, что это должно быть достигнуто путем маркировки теста async, но я еще не понял, как именно.

[UPD] вы на самом деле можете достичьВаша цель без использования таймаута теста:

test('Slow way of getting Fibonacci of 44', () => {
  const start = new Date();
  expect(slowFib(44)).toBe(701408733);
  expect(new Date() - start).toBeLessThan(5000);
});
0 голосов
/ 31 мая 2019

В вашем тестовом файле вы можете установить jest.setTimeout(5000);, который переопределяет тайм-аут по умолчанию для тестового примера в jest

0 голосов
/ 28 мая 2019

Я думаю, вам нужно будет реализовать свой собственный таймер (с помощью setTimeout или с помощью Promises). В качестве альтернативы можно использовать ключевое слово async для своей функции, чтобы оно работало со встроенным параметром:

test('Slow way of getting Fibonacci of 44', async () => {
  expect(slowFib(44)).toBe(701408733);
}, 5000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...