我有一个集成了2个第三方库,imagesLoaded和Isotope的组件。
在浏览器和cli模式下运行测试时,我遇到了相互冲突的测试失败。错误是:
Error: Assertion Failed: You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in a run
或
TypeError: 'undefined' is not an object (evaluating 'self.$().isotope')
当我尝试在回转运行循环中包装回调时,它们会传入cli模式,但在浏览器模式下失败。我似乎找不到合适的组合。这个问题似乎发生在imagesLoaded的回调中,好像我删除了这个插件,似乎传递得很好。
我尝试了多种组合,但这是我最新的代码。如果有人了解如何在此组件中正确使用运行循环,那将会有所帮助。
handleLoad: function() {
let self = this;
Ember.run.scheduleOnce('afterRender', this, function(){
self.$().imagesLoaded( function() {
Ember.run(function() {
self.$().isotope({itemSelector: ".card-container"});
self.$().isotope('shuffle');
});
}); // imagesLoaded
}); // Ember.run
}.on('didInsertElement')
答案 0 :(得分:0)
您必须将现有代码包装在
中Ember.run(function () {
// Ember.run.scheduleOnce('afterRender....
});
因为这告诉Ember运行循环的开始和结束 - 在生产/开发中,这是由Ember本身完成的,但在测试中你必须包装它。
作为替代方案,你可以开始&通过显式调用它来手动结束运行循环(参见API Docs):
Ember.run.begin() // <-- tell Ember that your starting a run loop
//Ember.run.scheduleOnce('afterRender', ...
//more ember run loops here
Ember.run.end(); // <-- tell Ember that the run loop ends here