2017-03-03 5 views
0

は、私は、静的メソッドがある(app/models/fruit.jsで)単純なオブジェクトがあります。Ember qUnitでどのようにクラス関数をテストできますか?

import Ember from 'ember'; 

const Fruit = Ember.Object.extend({ 

}); 

Fruit.reopenClass({ 
    createFruit() { 
    } 
} 

export default Fruit; 

を、私は(tests/unit/models/fruit-test.jsで)テストを持っている:

import Ember from 'ember'; 
import { moduleFor, test } from 'ember-qunit'; 

moduleFor('model:fruit', 'Unit | Model | fruit', { 
}); 

test('has static method', function(assert) { 
    let model = this.subject(); 
    assert.ok(model.createFruit); 
}); 

をするので、これは正しく失敗した - 私はそれを理解します - modelは、クラスそのものではなく、クラスの実際のインスタンスです。

これはtesting docsに記載されている:

テストヘルパーは、このようなテストの下で検索して私たちのオブジェクトのインスタンス化を処理対象の関数として、いくつかの便利さを提供してくれる。

などember-qunit docs

あなたはコンポーネントインスタンスに直接アクセスすることはできません。

インスタンスメソッド/プロパティの代わりにクラス関数/プロパティをテストするにはどうすればよいですか?

答えて

2

これに対する簡単な答えは、テストファイルに直接クラスを簡単にインポートすることです:私は

+1

私はクラスがthisのどこかに保存されるかもしれないと思ったが、これは非常に単純なアプローチである

import Ember from 'ember'; import { moduleFor, test } from 'ember-qunit'; import Fruit from 'myapp/models/fruit'; moduleFor('model:fruit', 'Unit | Model | fruit'); test('has static method', function(assert) { assert.ok(Fruit.createFruit); }); 

この場合、「moduleFor」を持たないことで逃げることができるのだろうか?それはあなたが使用するつもりはない、バックグラウンドでインスタンスを作成することは少し無駄に思えますが、オブジェクトがインスタンス化されていない静的メソッドをテストするためのよりクリーンな方法があるのだろうかと思います –

関連する問題