@Alexis17842

Можно ли манипулировать временем через jasmine.clock() при тестировании асинхронных функций?

Доброго времени суток.
Осваиваю мануал по BDD с помощью Jasmine.
Там есть замечательная возможность тестирования функций вроде setTimeout() с помощью jasmine.clock(), но в синхронном режиме.
Можно ли манипулировать временем через jasmine.clock() при тестировании асинхронных функций, когда используется вызов done()?

Вот, скажем, ниже код на основе примеров туториала. Можно ли с помощью jasmine.clock() сократить ожидание вызова коллбэков и, если можно, то как это правильно сделать?

describe("long asynchronous specs", function() {
    var value;
    
	beforeEach(function(done) {
		jasmine.clock().install();
    });
     
	beforeEach(function(done) {
		value = 0;
		done();
    }, 10000);
	jasmine.clock().tick(10001);// чтобы не ждать 10 с в предыдущем блоке beforeEach
    it("takes a long time", function(done) {
		setTimeout(function() {
			value++;
			expect(value).toBeGreaterThan(0);
			done();
		}, 9000);
	   //jasmine.clock().tick(9001);
    }, 10000);
	jasmine.clock().tick(10001);// чтобы не ждать 10 с в предыдущем блоке beforeEach
	afterEach(function(done) {
		done();
	}, 1000);
	afterEach(function(done) {
		jasmine.clock().uninstall();  
	});
	
});
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
@Alexis17842 Автор вопроса
Я, кажется, нашел ответ на свой вопрос.

Кому интересно, делюсь:
describe("clock pollution", function() {
    var value;
	it("async with clock", function(done) {
      jasmine.clock().install()
      setTimeout(function() {
        value = 1;
		expect(value).toBeGreaterThan(0);
		jasmine.clock().uninstall()
        done()
      }, 20000)
      jasmine.clock().tick(20001)
    })
})


Или вариант с промисами:

function delay(ms) {
	return new Promise(function(resolve, reject) {
		setTimeout(resolve, ms)
	})
}

describe("clock pollution", function() {
	var value;
	it("async with clock", function(done) {
		jasmine.clock().install()
		delay(2000)
			.then(function() {
				value = 1;
				expect(value).toBeGreaterThan(0);
				jasmine.clock().uninstall()
				done()
			})
		jasmine.clock().tick(2001)
	})
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы