2016-10-10 7 views
4

Emberでこのコードをテストするにはどうすればよいですか?一般的に、私にそのコンセプトを教えてください。Emberで経路のwillTransitionアクションをテストするには?

// app/routes/products/new.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model() { 
    return this.store.createRecord('product'); 
    }, 
    actions: { 
    willTransition() { 
     this._super(...arguments); 
     this.get('controller.model').rollbackAttributes(); 
    } 
    } 
}); 

私はこれをどうやって作るのか分かりません。ルート内のスタブモデルですか?私は店舗がルートテストで利用できないことを発見しました。

RubyとRSpecの後、これらすべての新しいJavaScriptの世界はちょっと混乱しています。しかし、とにかくそれを学びたいと思います。

+0

コースコードが間違っています;)、 'willTransition'はアクションではなくフックです。 'actions'ハッシュに入れないでください。そして、あなたはそれを休むように呼び出すことができます。ストアをスタブすることができます。 – Lux

+0

@Lux私たちのロジックを 'willTransition'フックに書き出すには、アクションでそれを定義する必要がありますか? – kumkanillam

+0

@Lux、あなたが知っているガイドhttps://guides.emberjs.com/v2.8.0/routing/preventing-and-retrying-transitions/によると、willTransitionはアクションハッシュで表示されます。 "{{link-to}}、transitionTo、またはURLを経由して遷移が試みられると、現在アクティブなルート上でwillTransitionアクションが発生します。" - 彼らはそれを "フック"ではなく "アクション"と呼びます。 – Molfar

答えて

2

ユニットテストでは、すべての外部依存関係をスタブすることが考えられます。基本的に、あなたが正しいとアクションを呼び出すために電話または適用を使用する必要があり、この場合には(テストしているものは何でも関数を呼び出すそして、this.subject()に渡すコントローラとモデルをスタブ

// tests/unit/products/new/route-test.js 
test('it should rollback changes on transition', function(assert) { 
    assert.expect(1); 
    let route = this.subject({ 
    controller: Ember.Object.create({ 
     model: Ember.Object.create({ 
     rollbackAttributes() { 
      assert.ok(true, 'should call rollbackAttributes on a model'); 
     } 
     }) 
    }) 
    }); 
    route.actions.willTransition.call(route); 
}); 

:燃えさしでは、これを行うことができますスコープ)、次にrollbackAttributes()が呼び出されたことをアサートします。

assert.expect(1);は、テスト開始時に、正確に1アサーションを待つようにQUnitに指示します。