emberjs:使用Pavlov / QUnit进行测试会产生TypeError:Object#<object>没有方法'getHandler'</object>

时间:2013-05-26 13:19:47

标签: ember.js

警告:我是新手。提前感谢您的帮助。

Pavlov / QUnit导致我的ember应用程序中的路由器出现问题。单独使用QUnit时,会通过以下测试:

test "/contacts", ->
  expect(1)
  visit('/contacts').then ->
    ok(exists(".nav"), "The navbar was rendered")

但是当使用带有QUnit的Pavlov时,以下测试会死掉:

describe 'contacts index', ->
    it 'does render index', ->
      visit('/contacts').then ->
        assert(exists(".nav")).isTrue('The navbar was rendered')

并在执行以下操作时在collectObjects方法中生成“has no method'getHandler'”错误:

  

var handler = router.getHandler(result.handler);

堆栈跟踪如下:

TypeError: Object #<Object> has no method 'getHandler'
    at collectObjects (http://localhost:3000/assets/test_helper.js:37674:28)
    at Object.Router.handleURL (http://localhost:3000/assets/test_helper.js:37347:9)
    at Ember.Router.Ember.Object.extend.handleURL (http://localhost:3000/assets/test_helper.js:38135:17)
    at Ember.Application.Ember.Namespace.extend.handleURL (http://localhost:3000/assets/test_helper.js:41451:12)
    at http://localhost:3000/assets/test_helper.js:18367:19
    at Object.Ember.handleErrors (http://localhost:3000/assets/test_helper.js:14228:17)
    at invoke (http://localhost:3000/assets/test_helper.js:18365:16)
    at Object.tryable (http://localhost:3000/assets/test_helper.js:18550:14)
    at Object.Ember.tryFinally (http://localhost:3000/assets/test_helper.js:15023:24)
    at Object.Ember.run (http://localhost:3000/assets/test_helper.js:18554:16)

2 个答案:

答案 0 :(得分:3)

设置Ember-testing / QUnit测试,如下所示:

App.setupForTesting();
App.injectTestHelpers();

module("Integration Tests", {
  setup: function() {
    App.reset();
    Ember.run(App, App.advanceReadiness);
  }
});

当然,请将App替换为您应用的名称。

Testing guide目前建议使用此功能,但不会显示代码。

答案 1 :(得分:0)

我刚刚遇到与QUnit相同的问题。测试在我的Ember应用程序准备好之前开始,因此对visit()的调用将失败。

尝试将QUnit自动启动标志设置为false(http://api.qunitjs.com/QUnit.config/)并从应用程序就绪回调中调用QUnit.start()。这对我来说是固定的,如果你需要更多的帮助,你可以查看这个回购:https://github.com/remichaignon/ember-boilerplate