Javascript Ember.js&;QUnit:“;类型错误:对象#<;对象>;没有方法';getHandler'&引用;拜访时
在测试中使用visit时出现错误: TypeError:Object#没有方法“getHandler”Javascript Ember.js&;QUnit:“;类型错误:对象#<;对象>;没有方法';getHandler'&引用;拜访时,javascript,ember.js,Javascript,Ember.js,在测试中使用visit时出现错误: TypeError:Object#没有方法“getHandler” module("visit", { setup: function() { Ember.run(App, App.advanceReadiness); }, teardown: function() { App.reset(); } }); test("visit works", function () { expect(2); // this ge
module("visit", {
setup: function() {
Ember.run(App, App.advanceReadiness);
},
teardown: function() {
App.reset();
}
});
test("visit works", function () {
expect(2);
// this gets executed
equal(1, 1);
return visit("/").then(function() {
// this doesn't
equal(1, 1);
});
});
产生的错误跟踪是:
Died on test #2 at eval (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:10:1)
at eval (native)
at eval (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066), <anonymous>:2:14066)
at Function.p.extend.globalEval (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066), <anonymous>:2:14077)
at p.ajaxSetup.converters.text script (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066), <anonymous>:2:83767)
at cC (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066), <anonymous>:2:5874)
at y (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066), <anonymous>:2:79888)
at d (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066), <anonymous>:2:85578): Object #<Object> has no method 'getHandler'
Source:
TypeError: Object #<Object> has no method 'getHandler'
at generateHandlerInfos (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:25824:31)
at performTransition (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:25758:30)
at createURLTransition (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:25501:18)
at doTransition (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:26067:20)
at Object.Router.handleURL (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:25213:20)
at Ember.Router.Ember.Object.extend._doTransition (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:26491:53)
at Ember.Router.Ember.Object.extend.handleURL (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:26331:21)
at Ember.Application.Ember.Namespace.extend.handleURL (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:30240:16)
at Object.Backburner.run (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:4862:30)
at Object.Ember.run (eval at <anonymous> (eval at <anonymous> (http://127.0.0.1:3000/javascripts/libs/jquery/jquery-1.8.0.min.js:2:14066)), <anonymous>:5200:30)
你应该去读书
使用最新的Ember,您无需运行App.advanceReadiness
,只需在teardown
中运行App.reset
,在定义任何测试套件之前,您需要调用:
App.rootElement = '#qunit-fixtures';
App.setupForTesting();
App.injectTestHelpers();
一切都应该很好
让我知道下面的方法是否有效,如果有效,请给出一个我可以使用的jsbin;-)
编辑
我也不确定这会改变什么,但在他们的示例中,他们使用了然后而不是然后:
visit('/');
andThen(function(){ ... });
我需要补充的是,我正在使用Ajax调用加载我的Ember应用程序和测试代码。在检查新安装后,当将所有内容放入头部时,它可以正常工作,但是当使用Ajax获取它时,尽管在加载所有内容时手动加载并启动QUnit,但会发生此错误。因此,允许使用jQuery getScript加载Ember吗?advanceReadiness是什么?是否定义了位于根的路由,如果是的话,关联的路由/控制器/模型是什么样子的?根据Ember网站:“默认情况下,调用Ember.Application.create()将通过调用Ember.Application.initialize()方法自动初始化应用程序。如果需要延迟初始化,您可以调用应用程序的延迟准备()方法。当您准备好初始化应用程序时,请调用其AdvanceRadiness()方法。“
visit('/');
andThen(function(){ ... });