2016-09-21 60 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

很多方式來測試這一點,但我更喜歡的一種是通過間諜/使用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); 
});