Ошибка создания компонента Ember в 2.10

Когда я делаю 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)

Несколько вещей, которые я пробовал:

  • ЗапуститьApp() в настройке и уничтожить, аналогично интеграционному тестированию.

  • Чтобы переопределить init, но init всегда требует вызова _super()

  • Пытался выполнить в среде интеграционного тестирования, в которой создается приложение.


person wallop    schedule 12.12.2016    source источник
comment
Кажется, это специфично для 2.10.x. У меня не получается на 2.9.1, 2.8.2...   -  person Jim    schedule 27.12.2016


Ответы (2)


Я пытался сделать renderer: this.render или другие варианты, но ничего не сработало, в конце концов, основываясь на наведении, которое я получил здесь

Я сделал renderer: {} и все заработало.

В ссылке есть и другие хорошие решения, но в моем сценарии это не нужно, так как я ничего не визуализирую.

person wallop    schedule 28.12.2016

Я не знаю, требовалось ли модульное тестирование компонента Ember.Component.Create() в 1.13; но теперь не стоит создавать компонент самостоятельно при модульном тестировании компонентов; по крайней мере, это то, что я узнал, имея дело с Эмбер.

Вы должны использовать moduleForComponent из ember-qunit с параметром unit: true и получить компонент просто с this.subject(); внутри метода тестирования.

Я создал twiddle для иллюстрации модульного тестирования компонента с примесью. Надеюсь, это поможет.

person feanor07    schedule 13.12.2016
comment
спасибо за усилия, но я знаю, как проводить модульное тестирование компонента, делая это бесчисленное количество раз. Это крайний случай, когда я тестирую миксин, и мне нужно создать компонент. - person wallop; 13.12.2016
comment
Извините; Я не понял этого из вашего вопроса :( просто из любопытства, зачем вам нужен компонент при модульном тестировании миксина? - person feanor07; 13.12.2016