Как изменить тайм-аут на спецификации jasmine-node async
Как я могу пройти этот тест, не прибегая к запускам/ожиданиям для блоков?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
Ответы
Ответ 1
Отправленный запрос на перенос для этой функции (https://github.com/mhevery/jasmine-node/pull/142)
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
}, 5000); // set timeout to 5 seconds
Ответ 2
Вы можете (сейчас) установить его непосредственно в спецификации, как Jasmine docs.
describe("long asynchronous specs", function() {
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
it("takes a long time", function(done) {
setTimeout(function() {
done();
}, 9000);
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
Ответ 3
Чтобы установить глобальный тайм-аут Jasmine- Node, сделайте следующее:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
Кредит разработчика Gabe Hicks для выяснения части .getEnv() посредством отладки, несмотря на дезинформацию в документе README, который утверждает, что это сделано, установив jasmine.DEFAULT_TIMEOUT_INTERVAL.
Если вы хотите установить индивидуальный тайм-аут только для одного его(), вы можете попробовать передать тайм-аут (миллисекунды) в качестве третьего аргумента (после оператора строки и функции). Вот пример этого здесь, но я не уверен, что произойдет, если пользовательский тайм-аут будет длиннее, чем Jasmine default. Я ожидаю, что это потерпит неудачу.
Ответ 4
Похоже, теперь вы можете добавить его в качестве последнего аргумента для функции it
:
describe('my test', function(){
it('works', function(done){
somethingAsync().then(done);
}, 10000); // changes to 10 seconds
});
Ответ 5
Почему бы не шпионить за setTimeout()
?
Что-то вроде:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
expect(timeout).toEqual(2500);
func();
});
setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();
Ответ 6
Измените j $.DEFAULT_TIMEOUT_INTERVAL на 10000 в следующем файле: npm\ node_modules\jasmine-core\lib\jasmine-core