1

我遇到一些第三方代码正在执行回调的情况

YUI({
  delayUntil: 'domready'
}).use(....)

我的问题是我正在为我的代码使用另一个异步脚本加载器,我需要将该回调延迟到我的脚本加载之后。我正在使用 Yeti 进行单元测试,它将 YUI 注入测试页面,否则我的代码与 YUI 无关。

jQuery 有一个 holdReady 方法,它延迟执行通过 jQuery 注册的 domready 处理程序,直到稍后的时间。我想知道 YUI 是否有一些等效的方法。这是一个测试页面,被测代码不使用 YUI,所以如果解决方案涉及一些丑陋的 hack,那很好。

编辑:

事实证明,Yeti 使用它自己的作用域 YUI 对象,并且无论如何都无法访问它,所以即使我找到了这个问题的答案,它在这里也无济于事。如果有人想知道我是如何解决 Yeti 特定问题而没有在 YUI 中找到延迟文档就绪处理程序的方法,这里是我的代码:

!function(){
    var mochaListeners = [];
    var fakeRunner;
    // Stub for Yeti in case mocha isn't loaded on domready
    window.mocha = {
        run : function(){
            return fakeRunner = {
                on : function(type, fn){
                    mochaListeners.push([type, fn]);
                }
            };
        }
    };
    yepnope([
        {
            load : [
                'assets/lib/lodash.js',
                'assets/lib/jquery.js',
                'assets/lib/css/mocha.css',
                'assets/lib/mocha.js', 
                'assets/lib/chai.js', 
                'assets/lib/sinon.js'
            ],
            complete : function(){
                mocha.setup('bdd')
            }
        },{
            load : 'assets/js/my_tests.js',
            complete : function(){
                executeTests = function(){
                    var runner = mocha.run();
                    runner.ignoreLeaks = true;
                    _.forEach(mochaListeners, function(listener){
                        runner.on(listener[0], function(){
                            _.extend(fakeRunner, runner);
                            listener[1].apply(this, arguments);
                        });
                    });
                };
                if(document.readyState === 'complete')
                    executeTests();
                else
                    $(executeTests);
            }
    }]);
}();
4

0 回答 0