1

http://shairez.com/2012/07/ember-js-tdd-how-to-test-your-ember-views/に沿って、Emberビューの基本的なテストを作成しようとしていますが、 「UncaughtTypeError:Undefinedのメソッド'appendTo'を呼び出すことはできません」を取得します。

仕様:

describe "my view", ->

  myView = null

  beforeEach ->
    myView = Sysys.ActView.create()
    Ember.run ->
      myView.append()


  afterEach ->
    Ember.run ->
      myView.remove()
    myView = null

  it "should be defined", ->
    expect(myView).toBeDefined()

  it "should have a button", ->
    expect(myView.$("button.btn-primary").length).toEqual(1);

エラーはEmber.View.appendToから発生します:

this.$().appendTo(target)

ここtargetで、は<body class="ember-application">...</body> (予想どおり)であり、thismyViewです。ただし、this.stateは「preRender」であり、this.$()未定義であるため、エラーが発生します。

何が間違っているのかわかりません。ビューは作成されていますが、レンダリングされていないと思います。チュートリアルで提案されているように、append()内部への呼び出しもあります。Ember.run

また、テストを実行しなくても、キャッチされない例外が発生することに気付きました。これは、ApplicationViewを除いて同じです。だから私はテストのためにすべてを正しく初期化しているのだろうかと思っています。インクルードファイルは以下のとおりです(アセットパイプラインでRails 3.2を使用)

Spec.js.coffee

#=require_tree ./
#=require_tree ../../app/assets/javascripts

app / Assets / javascripts / application.js.coffee:

#= require jquery
#= require jquery_ujs

#= require vendor/handlebars-1.0.0.beta.6
#= require vendor/ember-1.0.0-pre.2
#= require vendor/ember-data

#= require_self
#= require sysys
Sysys = Ember.Application.create();
#= require_tree .

app / Assets / javascripts / sysys.js.coffee:

#= require ./store
#= require_tree ./models
#= require_tree ./controllers
#= require_tree ./views
#= require_tree ./helpers
#= require_tree ./templates
#= require_tree ./routes
#= require_self

Sysys.initialize()
4

1 に答える 1

0

要素が DOM に挿入された後にのみ、「this.$()」を呼び出すことができます。まだ 'preRender' 状態にあり、まだ DOM ('inDom') ではないことに気付いたので、原因は "reRender" にある可能性があります (呼び出しスタックを確認してください)。
これは、(たとえば) bindAttr を使用していて、ビューが DOM に挿入されていなくても、バインド先のプロパティが既に変更されている場合に発生する可能性があります (*咳* コール スタック *咳*)。

于 2012-12-16T14:18:37.943 に答える