2016-06-03 5 views
0

Согласно документации для Ember.run это:Почему окончание вызова ember.run до завершения работы, запланированного ember.run.later, завершается?

пробегов переданную цель и метод внутри RunLoop, обеспечивая любые отсроченные действия, включая переплеты и просмотров обновлений смываются на конец.

и поэтому я ожидал, что, когда я использую его в тесте, если код тестируемой были запланировать работу для последующего использования Ember.run.later, что он должен завершить до отделки вызова Ember.run, но это, кажется, не быть так:

test('Ember.run waits for all scheduled actions to finish', function(assert) { 
    assert.expect(2); 
    var done = assert.async(); 
    let isRunLaterThingFinished = false; 
    Ember.run(function() { 
    Ember.run.later(function() { 
     isRunLaterThingFinished = true; 
     assert.ok(true, 'the scheduled thing happened'); 
     done(); 
    }, 1); 
    }); 
    assert.ok(isRunLaterThingFinished, "scheduled actions should have happened by the time ember run finishes"); 
}); 

какие результаты в:

Ember.run waits for all scheduled actions to finish 
1. scheduled actions should have happened by the time ember run finishes 
Expected: true 
Result: false 

может кто-нибудь объяснить, что я здесь отсутствует, и как я могу иметь мои тесты ждать все запланированные методы, чтобы закончить, прежде чем делать мой утверждать s?

+0

Я нашел ресурс, который доказывает, что я достаточно осведомлен о моем понимании ember runloops: https://github.com/eoinkelly/ember-runloop-handbook – Bjornicus

ответ

2

Ember.run.later создаст отдельный цикл запуска. Что вам нужно использовать, это Ember.run.schedule.

Ember.run(function() { 
    Ember.run.schedule('actions', this, function() { 
     // The code goes here 
    }); 
    }); 

Таким образом, ваша функция получает в actions очереди текущего цикла выполнения и будет выполняться до конца цикла, когда очередь очищается.

+0

Хорошо, это имеет смысл, но что, если я действительно хочу, чтобы он запускался позже, как через несколько секунд? – Bjornicus

+0

ну, тогда у вас не должно возникнуть никаких проблем с запуском в отдельном цикле запуска. –

+0

Извините, я имею в виду, если я хочу, чтобы мой тест подождал, пока это не закончится. Есть ли способ сделать мой тест дождаться завершения всех циклов запуска? – Bjornicus

Смежные вопросы