Ответ 1
Вы можете использовать сервис для обработки данных. Затем сервис может быть введен в помощник, который затем может быть легко протестирован.
Помощники в Ember 2.x теперь являются "реальными" объектами и могут иметь доступ к услугам.
Служба может выглядеть примерно так:
import Ember from 'ember';
export default Ember.Service.extend({
profile: {
name: 'mary',
},
});
Помощник получит данные из службы через инъекцию:
import Ember from 'ember';
export default Ember.Helper.extend({
person: Ember.inject.service(), // <-- here
compute(params) {
const text = params[0];
const name = this.get('person.profile.name');
const phrase = `${text} ${name}`;
return this.upperCase(phrase);
},
upperCase(str) {
return str.toUpperCase();
},
});
И наконец, unit test просто включит сервис Person в качестве требуемого need
:
import { moduleFor, test } from 'ember-qunit';
moduleFor('helper:upper-case', {
needs: [ 'service:person' ], // <-- here
});
test('when the upperCase helper is used', function(assert) {
const helper = this.subject();
const result = helper.compute([ 'goodbye' ]);
const expected = 'GOODBYE MARY';
assert.equal(result, expected,
'...the dependency is injected and all are uppercased');
});
Кроме того, услугу можно также вводить через ваше приложение через инициализатор, например:
export function initialize(application) {
application.inject('controller', 'person', 'service:person');
application.inject('component', 'person', 'service:person');
application.inject('route', 'person', 'service:person');
// etc.
}
export default {
name: 'person',
initialize,
};
Я продемонстрировал Ember Twiddle, чтобы продемонстрировать.