Ember 2.10 组件创建错误
Ember component creation error in 2.10
当我在 mixin 的单元测试中执行 Ember.Component.Create() 时,出现此错误。
我正在将 ember 从 1.13 升级到 2.10,此测试在 1.13 中运行良好,但在 2.10 中出现此错误。看起来在 2.10 ember 组件初始化需要一个应用程序实例。
Died on test #1 at Module.callback (http://localhost:4200/assets/tests.js:250:19)
at Module.exports (http://localhost:4200/assets/vendor.js:131:32)
at requireModule (http://localhost:4200/assets/vendor.js:30:18)
at TestLoader.require (http://localhost:4200/assets/test-support.js:7104:7)
at TestLoader.loadModules (http://localhost:4200/assets/test-support.js:7096:14)
at Function.TestLoader.load (http://localhost:4200/assets/test-support.js:7126:22)
at http://localhost:4200/assets/test-support.js:7009:18: Cannot instantiate a component without a renderer. Please ensure that you are creating <(subclass of Ember.Component):ember210> with a proper container/registry.@ 9 ms
Source:
Error: Cannot instantiate a component without a renderer. Please ensure that you are creating <(subclass of Ember.Component):ember210> with a proper container/registry.
at Class.init (http://localhost:4200/assets/vendor.js:51954:15)
at Class.superWrapper [as init] (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:50443:19)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:50493:19)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.exports.default._emberMetal.Mixin.create._Mixin$create.init (http://localhost:4200/assets/vendor.js:51000:17)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:17472:19)
at Class.superWrapper [as init] (http://localhost:4200/assets/vendor.js:50175:22)
我尝试过的一些东西:
在setup和destroy中调用startApp(),类似于集成testi
ng
要覆盖 init 但 init 总是需要调用 _super()
试图在创建应用程序的集成测试环境中执行
我不知道在 1.13 中是否需要对组件进行单元测试 Ember.Component.Create()
;但是你现在不应该在组件的单元测试期间自己创建组件;至少这是我在处理 Ember.
过程中学到的
您应该使用 ember-qunit
中的 moduleForComponent
和 unit: true
参数,并在测试方法中使用 this.subject();
简单地获取组件。
我已经为您创建了一个 twiddle 来说明使用 mixin 对组件进行单元测试。希望对您有所帮助。
我试过 renderer: this.render
或其他选项,但没有任何效果,最终根据我得到的线索 here
我做了 renderer: {}
,效果很好。
link 中还有其他好的解决方案,但在我的场景中不需要它,因为我没有渲染任何东西。
当我在 mixin 的单元测试中执行 Ember.Component.Create() 时,出现此错误。 我正在将 ember 从 1.13 升级到 2.10,此测试在 1.13 中运行良好,但在 2.10 中出现此错误。看起来在 2.10 ember 组件初始化需要一个应用程序实例。
Died on test #1 at Module.callback (http://localhost:4200/assets/tests.js:250:19)
at Module.exports (http://localhost:4200/assets/vendor.js:131:32)
at requireModule (http://localhost:4200/assets/vendor.js:30:18)
at TestLoader.require (http://localhost:4200/assets/test-support.js:7104:7)
at TestLoader.loadModules (http://localhost:4200/assets/test-support.js:7096:14)
at Function.TestLoader.load (http://localhost:4200/assets/test-support.js:7126:22)
at http://localhost:4200/assets/test-support.js:7009:18: Cannot instantiate a component without a renderer. Please ensure that you are creating <(subclass of Ember.Component):ember210> with a proper container/registry.@ 9 ms
Source:
Error: Cannot instantiate a component without a renderer. Please ensure that you are creating <(subclass of Ember.Component):ember210> with a proper container/registry.
at Class.init (http://localhost:4200/assets/vendor.js:51954:15)
at Class.superWrapper [as init] (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:50443:19)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:50493:19)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.exports.default._emberMetal.Mixin.create._Mixin$create.init (http://localhost:4200/assets/vendor.js:51000:17)
at Class.superWrapper (http://localhost:4200/assets/vendor.js:50175:22)
at Class.init (http://localhost:4200/assets/vendor.js:17472:19)
at Class.superWrapper [as init] (http://localhost:4200/assets/vendor.js:50175:22)
我尝试过的一些东西:
在setup和destroy中调用startApp(),类似于集成testi ng
要覆盖 init 但 init 总是需要调用 _super()
试图在创建应用程序的集成测试环境中执行
我不知道在 1.13 中是否需要对组件进行单元测试 Ember.Component.Create()
;但是你现在不应该在组件的单元测试期间自己创建组件;至少这是我在处理 Ember.
您应该使用 ember-qunit
中的 moduleForComponent
和 unit: true
参数,并在测试方法中使用 this.subject();
简单地获取组件。
我已经为您创建了一个 twiddle 来说明使用 mixin 对组件进行单元测试。希望对您有所帮助。
我试过 renderer: this.render
或其他选项,但没有任何效果,最终根据我得到的线索 here
我做了 renderer: {}
,效果很好。
link 中还有其他好的解决方案,但在我的场景中不需要它,因为我没有渲染任何东西。