Ответ 1
Жасмин внутренне использует setTimeout
, чтобы дождаться завершения спецификации в течение определенного периода времени.
В соответствии с этим Q/A - Почему setTimeout() "break" для больших значений миллисекундной задержки?:
setTimeout с использованием 32-битного int для хранения задержки
...
Значения таймаута, слишком большие, чтобы вписаться в 32-битное целое число, могут вызывать переполнение в FF, Safari и Chrome, в результате чего таймаут запланировано немедленно. Это имеет смысл просто не планировать эти таймауты, поскольку 24,8 дня выходят за рамки разумных ожиданий браузер останется открытым.
Как только Infinity
больше любого другого числа, происходит переполнение.
Максимальное безопасное целое число в этом случае равно 2 31 -1 = 2147483647. Это значение конечно, поэтому тест на самом деле не будет выполняться бесконечно долго, но, как я сказал, 24 часа в сутки достаточно.
Вы можете определить константу для сохранения этого значения:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;
var MAX_SAFE_TIMEOUT = Math.pow(2, 31) - 1;
describe('suite', function () {
it('should work infinitely long', function (done) {
setTimeout(function () {
expect(true).toBe(true);
done();
}, 3000)
}, MAX_SAFE_TIMEOUT);
});