14

イニシャライザでは、ヘルパーにオブジェクトを注入しています。これはアプリで適切に動作します。

しかし、QUnit でヘルパーをテストすると、次のエラーが発生します。

TypeError: undefined は関数ではありません。

ヘルパーは注入されたオブジェクトにアクセスできませんがApp.__container__.lookup('myObject:main')、モジュールの setup 関数内で呼び出すと、オブジェクトが返されます。

どうすればこれを機能させることができますか?テストクラスはfiddle1fiddle2に基づいています。

次の CoffeeScript の例は、私の問題を示しています。

App = undefined
entered = false
initializedCount = 0

module 'testing',
  setup: ->
    App = startApp()

  teardown: ->
    Ember.run(App, 'destroy')

Ember.Application.initializer({
  name: "person",
  initialize: (container, application) ->
    initializedCount++;
    person = {
      name: "Mary"
    }
    container.register('person:main', person, {instantiate: false});
    container.injection('helper', 'person', 'person:main');
});

createView = (template, context) ->
  context = {}  unless context
  View = Ember.View.extend(
    controller: context
    template: Ember.Handlebars.compile(template)
  )
  View.create()

append = (view) ->
  Ember.run ->
    view.appendTo "#ember-testing"
    return
  return


Ember.Handlebars.helper "upcase", (value) ->
  person = @get('person'); # <-- test fails here
  value += person.name;
  value.toUpperCase()

Ember.testing = true

test('non-redirect route /third', ->
  equal(initializedCount, 2, 'initializer ran');
  App.reset();
  equal(initializedCount, 3, 'initializer ran');
  App.reset();
  equal(initializedCount, 4, 'initializer ran');
);

test "a handlebars helper", ->
  view = createView("{{upcase 'something'}}")
  append view
  equal view.$().text(), "SOMETHING MARY"
  return
4

2 に答える 2