2016-02-28 82 views
0

我有一個Ember組件包裝一個隨機jQuery插件。Ember組件,如何等待隨機jQuery插件初始化?

setUp: on('didInsertElement', function() { 
    scheduleOnce('afterRender',() => { 
    this.$().datetimepicker(); 
    }); 
}) 

插件大約需要250毫秒就能顯示在屏幕上,這使我編寫驗收測試,像這樣:

test('clicking toggles visibility', function(assert) { 
    let done = assert.async(); 

    visit('/'); 

    andThen(function() { 
    assert.strictEqual(find('.xdsoft_datetimepicker:visible', 'body').length, 0); 
    }); 

    click('.xdsoft_datetimepicker'); 

    setTimeout(() => { 
    andThen(function() { 
     assert.strictEqual(find('.xdsoft_datetimepicker:visible', 'body').length, 1); 
     done(); 
    }); 
    }, 500); 
}); 

我的目標是改變組件,以便我可以依靠的click測試幫助程序阻止,直到jQuery元素在屏幕上。像didInsertElement或運行循環等待承諾,我可以解決一旦元素在屏幕上將是完美的。有這樣的事嗎?

回答

0

你可以考慮建立一個非同步的等待幫手等待插件之前繼續

+0

已經完成[這裏](https://github.com/kellyselden/ember-datetimepicker/blob/master/tests顯示/helpers/wait-for.js),但要求我的插件的任何消費者也有這個幫助器,以便在他們的測試中點擊組件。這就是爲什麼我希望把它燒成組件。 –