2016-09-21 8 views
1

モデルの店舗をテストする最良の方法は何ですか?私はember-data 2.7.0を使用しており、モデルインスタンスを作成してバックエンド(firebase)に正常に保存できることをテストしたいと考えています。Ember-Data Unit Testing Store

私はとEmber.run機能でvar record = store.createrecord.saveをラップしているが、私はこれをテストするための方法のYou can only unload a record which is not inFlight. `<(subclass of DS.Model):ember227:null>

+0

あなたがユニットに燃えさしデータを使用する必要はありませんレコードを作成するためのテスト。モデルと同じ属性を持つEmber.Objectを返すためにストアをモックできます。 –

+0

私は実際には同意しない。私が実際にやっているのは、テストをして、適切なエンドポイントを生成するようにモデルを正しく設定していることを確認する良い方法です。 – user2296332

答えて

2

多くを得るが、私は好む1はember-sinonを使用してスパイ/スタブを介して行われます。

import Route from 'ember-route'; 

export default Route.extend({ 
    actions: { 
    createAndSaveTheRecord() { 
     this.store.createRecord('dummy_model', { 
     id: 'dummy', 
     name: 'dummy' 
     }).save(); 
    } 
    } 
}); 

あなたはこのようになりますテストを持つことができます:

レコードを作成し、保存するため、このアクションを持っていると仮定すると

import sinon from 'sinon'; 

test('should create a record', function(assert) { 
    assert.expect(1); 

    // Arrange 
    let stub = sinon.stub().returns({save: sinon.stub()}); 
    let route = this.subject({store: {createRecord: stub}}); 

    // Act 
    route.send('createAndSaveTheRecord'); 

    // Assert 
    assert.ok(stub.calledWith('dummy_model', {id: 'dummy', name: 'dummy'})); 
}); 

test('should save the created record', function(assert) { 
    assert.expect(1); 

    // Arrange 
    let spy = sinon.spy(); 
    let route = this.subject({ 
    store: { 
     createRecord: sinon.stub().returns({ 
     save: spy 
     }) 
    } 
    }); 

    // Act 
    route.send('createAndSaveTheRecord'); 

    // Assert 
    assert.ok(spy.calledOnce); 
});