2016-09-21 2 views
1

Was ist der beste Weg, das Geschäft eines Modells zu testen? Ich verwende ember-data 2.7.0 und möchte testen, dass ich eine Model-Instanz erstellen und sie erfolgreich im Backend (Firebase) speichern kann.Ember-Data Unit Test Store

Ich habe die var record = store.create und record.save in und Ember.run Funktion eingewickelt, aber ich bekomme You can only unload a record which is not inFlight. `<(subclass of DS.Model):ember227:null>

+0

Sie brauchen nicht ember Daten in Einheit zu verwenden Tests zum Erstellen von Datensätzen. Sie können einen Scheinspeicher erstellen, um das Ember.Object mit denselben Attributen wie Ihr Modell zurückzugeben. –

+0

Ich widerspreche in der Praxis nicht. Ich denke, was ich wirklich verstehe, ist eine gute Möglichkeit, zu testen und sicherzustellen, dass meine Modelle korrekt konfiguriert sind, um die richtigen Endpunkte zu generieren. – user2296332

Antwort

2

Viele Weg, dies zu testen, aber die, die ich bevorzuge, ist durch Spionage/stubbing ember-sinon verwenden.

Vorausgesetzt, dass Sie diese Aktion zum Erstellen und Speichern eines Datensatzes:

import Route from 'ember-route'; 

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

Sie können einen Test haben, der wie folgt aussieht:

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); 
});