Как изменить тайм-аут на асинхронной спецификации jasmine-node
Как я могу пройти этот тест, не прибегая к блокам runs / waitsFor?
it("cannot change timeout", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
8 ответов:
вы можете (теперь) установить его непосредственно в спецификации, согласно 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; }); });
отправлен запрос на вытягивание для этой функции (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
чтобы установить глобальный тайм-аут Jasmine-Node, выполните следующие действия:
jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds
кредит разработчику Гейб Хикс для выяснения .getEnv () часть через отладку, несмотря на дезинформацию в дополнительные сведения который утверждает, что это сделано путем установки Жасмин.DEFAULT_TIMEOUT_INTERVAL.
Если вы хотите установить пользовательский тайм-аут только для одного it(), вы можете попробовать передать тайм-аут (миллисекунды) в качестве третьего аргумента (после строкового оператора и функции). Есть пример того, что делается здесь, но я не уверен, что произойдет, если пользовательский тайм-аут будет больше, чем по умолчанию Jasmine. Я ожидаю, что он потерпит неудачу.
похоже, теперь вы можете добавить его в качестве последнего аргумента для
it
функция:describe('my test', function(){ it('works', function(done){ somethingAsync().then(done); }, 10000); // changes to 10 seconds });
почему бы не шпионить за
setTimeout()
?что-то типа:
var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) { expect(timeout).toEqual(2500); func(); }); setTimeOut(function () { ... }, 2500); expect(spy).toHaveBeenCalled();