2013-09-05 2 views
7

Emberが最近1.0.0に到達したので、私はテストでそれを使用したいと思っていました。私はカルマとYeoman 1.0を使用しています。単体テスト・モデルにしたいのですが、分離を達成することは非常に困難です。Ember.jsのユニットテスト

私が今持っている例がある:1.0.0のよう

describe("Expense", function() { 
    return it("has a computed property called `explained`", function() { 
    var expense = App.Expense.create({ 
     name: "My first expense", 
     value: 34 
    }); 
    return expect(expense.get("explained")).to.equal("My first expense -- 34"); 
    }); 
}); 

、私は次のエラーを取得する:

Error: You should not call `create` on a model. Instead, call 
`store.createRecord` with the attributes you would like to set. 

私はモデルのインスタンスを作成するために、ストアにアクセスする必要がありますどのように?もっと理想的には、店に頼っていなくても、このようなモデルを簡単にスポーンするにはどうしたらいいですか?モデル全体をテストするためだけに、アプリケーション全体を産み出すことには意味がありません。

ありがとうございます。

+1

私が考えることができる方法は、App .__ container __。lookup( 'store:main')を介してストアを検索することです。おそらく、彼らはember-data DSでどのようにそれを行うのかを見てみることもできます。モデルテスト –

+0

答えを探している人にとって、このハックは機能します。それを解決済みとしてマークします。 – josemota

答えて

2

@ sly7_7さんの解説によると、App.__container__.lookup('store:main')経由でアプリ内の店舗を探しています。

+0

このようなことについて、私はいつもコアチームメンバーの助言を得ることを望んでいます...しかし結局のところ、これはテストであり、プロダクションコードではないので、これは十分だと思います。 –

0

あなたはthis.get(「店」)を使用する必要があります。createRecord(「費用」)

あなたは物事が仕事のやり方を変えエンバー・データ1.0.0ベータ版を、使用しているように見えます。 ember-dataプロジェクトのmigration.mdファイルを見てください。

(申し訳ありませんが、私は少し良くあなたの質問を読んでいる必要があります - 私は、現時点では同じ問題を抱えていると示唆したコンテナソリューションは私のために動作しません - ブラウザがクラッシュする原因):(

+0

これを書いて以来、実際にこのソリューションが私のために働くことを発見しました。それはqunitのテストのセットアップ機能の中で実行する必要があるということだけです。 –

4
ここで

私はユニットテストモデルのために、これまで使用してきた最低限のコードである。

var container, store, expense; 

container = new Ember.Container(); 
container.register('store:main', DS.Store.extend()); 
container.register('model:expense', App.Expense); 
store = container.lookup('store:main'); 

Ember.run(function() { 
    expense = store.createRecord('expense', { 
    name: "My first expense", 
    value: 34 
    }); 
}); 

店とthe way models are tested inside Ember Dataのコードに基づいて、私はあなたがテストのセットアップを減らすことができるとは思いません。