2015-02-03 2 views
2

Я пытаюсь написать тесты для своего аддона, но сталкиваясь с каким-то странным поведением.Компонент тестирования Ember.js с зависимостями службы

Я создал службу (через ember-cli generate), которая используется внутри компонента. Когда работает приложение, все работает нормально.

Однако при тестировании компонента я получаю сообщение об ошибке, указывающее, что служба не определена при попытке получить доступ к любым своим свойствам/методам.

В тесте я уже поставил на службу в «потребности», например, так:

needs: ['service:my-service']

«Нуждаясь» другие компоненты (например, ребенок из них, используемые внутри) работает, как и ожидалось, услуги странно терпят неудачу.

Есть ли какие-либо дополнительные шаги, которые необходимо выполнить?

Запуск ember-cli 0.1.12.

ответ

0

мне удалось получить эту работу, используя новый Ember.inject API, доступные в последней (как письма) 1.10 release.

Очевидно, что новый инъекционный API предназначен для замены needs в будущем, он также отлично работает с модульными испытаниями.

+1

не могли бы вы добавить пример кода? – andorov

+0

Это должно выглядеть примерно так: '' 'экспорта по умолчанию Ember.Component.extend ({ корзина Ember.inject.service ('корзины покупок') });' '' , как показано в документации здесь (доступ к услугам) - http://guides.emberjs.com/v2.1.0/applications/services/#toc_accessing-services – rk1

1

Когда вы создаете службу, она также генерирует инициализатор, задачей которого является внедрение услуги в различные места, в которых она вам нужна.

Итак, когда вы запустите Принятие проверит, что ваше приложение будет загружено и инициализаторы будут запущены, поэтому службы будут доступны.

Однако, когда единиц компонентов тестирования вы получаете чистый контейнер (лучше для тестирования). Вам просто нужно вводить то, что вам нужно:

moduleForComponent('foo-bar', null, { 
    setup: function(container) { 
    container.register('service:foo', FooService); 
    container.injection('component', 'fooService', 'service:foo'); 
    } 
}); 
+0

Когда я запускаю 'App = startApp();' Я вижу консольные журналы из инициализатора, который вводит службу в компонент. Я не знаю, означает ли это, что это правильно. Я попробовал ваш метод, но я получаю 'FooService undefined', окруженный кавычками, но я получил' Failed для создания экземпляра 'service: foo'.' У меня есть минимальная настройка, реплицирующая мою проблему [здесь] (https: //github.com/rk1/foobar), если вы заинтересованы. – rk1

+0

Решение Andrew работало для меня (я не на Ember 1.10, но так не могу использовать 'Ember.inject'). –

+0

@ rk1: вам нужно импортировать свой сервис в верхней части тестового файла. Что-то вроде 'import FooService from '../../../ services/foo';'. Вот почему вы получаете ошибку 'FooService undefined'. –

0

Нам просто удалось получить один рабочий, используя needs: ['service:myService'] вместо needs: ['service:my-service'].

Смежные вопросы