1

これらは、一般的なテストの最初のステップであるため、対処方法がわかりません。本番環境では、開発中に REST アダプター - フィクスチャを使用します。

たとえば、次の User モデルがあります。

Sks.User = DS.Model.extend
  name: DS.attr("string")
  email: DS.attr("string")

  gravatar: Ember.computed(->
    email = @get("email") || ""
    "http://www.gravatar.com/avatar/" + MD5(email)
  ).property("email")

  firstName: Ember.computed(->
    fName = @get('name').split(' ')[0]
  ).property("name")

  lastName: Ember.computed(->
    lName = @get('name').split(' ')[1]
  ).property("name")

Jasmine で TDD/BDD を使用してテストするにはどうすればよいですか? ロジックをテストする必要があると思います:姓、名、グラバターですが、どうすればそれをジャスミンに翻訳できますか? 私は最近、テストについて多くのことを読みましたが、あなたが知っている理論は実践とは異なり、壁にぶつかっただけです. :(

サーバーをシミュレートして JSON を取得する必要がありますか、それともフィクスチャを使用する必要がありますか?

4

1 に答える 1

0

モデルの単体テストでは、サーバーを処理する (またはサーバーをシミュレートする) べきではないと思います。それはアダプターに任されています。モデルの単体テストは、計算されたプロパティ (gravatar, firstname, lastnameこの場合) やその他のロジック (ライフサイクル コールバック、アクションなど) などに対するものになります。これらはかなり簡単にテストできます。ほとんどの場合、サーバーから分離されています。このようなもの:

describe "gravatar property", ->
  it "should append the md5 of the email to the gravatar path", ->
    user = Sks.User.createRecord name: "my name", email: "abc@def.com"
    expect(user.get('gravatar')).toBe "http://www.gravatar.com/avatar/#{MD5(user.get('email')}"

Ember-Data の RESTAdapter を使用している場合は、十分にテストされていると想定できます (ただし、モデルがアダプター データで正しく読み込まれていることを示すために、より高いレベルの統合テストを作成することもできます)。独自のアダプターを作成している場合は、そのための個別の単体テストが必要です。

アプリケーションのどの部分をロードするか

単体テストの場合、実際には、メインの名前空間 (例: Sks = Ember.Application.create(...)) とモデル定義 (例: Sks.User = DS.Model.extend(...)) およびその依存関係のみをロードする必要があります。モデルを作成するときにモック/スタブを渡すことで、他のすべてをスタブ化できます (参照:依存性注入とは? )

以前、テスト環境での Ember のルーターのオートロードでいくつかの問題が発生しました。ルーターを無効にすることもできます (ただし、これはテスト用にすべてをロードする場合にのみ問題になります。私は jasminerice を使用しているため、すべての JavaScript アセットは Rails サーバーによってコンパイルされ、テストはブラウザーで実行されます) - - 新しいルーターで使用できると思いますdeferReadiness: http://emberjs.com/api/classes/Ember.Application.html#method_deferReadiness。以前は設定してautoinit: falseいました。

于 2013-04-21T08:21:47.720 に答える