Ho un servizio ember che è di primaria importanza per recuperare i dati per un modello specifico e i discendenti del modello. La ragione per cui sto usando questo servizio è perché la rotta per questo particolare tipo sta usando una lumaca che non è la chiave primaria e quindi deve fare uno store.query
invece di store.find
. Quando recuperiamo questo modello, ho una logica che fa capolino nell'archivio di Ember per vedere se possiamo caricarlo da lì prima di andare alla query api. Anche questo venditore sta guardando per il cambiamento di slug e l'aggiornamento del modello corrente basato su quello.Unit Testing Ember Servizi che prelevano dati
Il problema che sto avendo è che questo sembra avere pochissima documentazione quando si tratta di testare una cosa come questa. In effetti non vedo una sezione sui servizi di prova in nessuna delle guide qui http://guides.emberjs.com/v2.1.0/
Questo è uno snippet del servizio in questione.
import Ember from 'ember';
export default Ember.Service.extend({
_vendorSlug: null,
vendor: null,
vendorSlug: function (key, value) {
if (arguments.length > 1) {
if (this._vendorSlug) {
return this._vendorSlug;
}
this._vendorSlug = value;
}
return this._vendorSlug;
}.property(),
ensureVendorLoaded: function (slug) {
var service = this,
vendorSlug = slug || service.get('vendorSlug'),
currentVendor = service.get('vendor'),
storedVendor;
if (!Ember.isNone(currentVendor) && (vendorSlug === currentVendor.get('slug'))) {
return new Ember.RSVP.Promise((resolve) => {
resolve(currentVendor);
});
} else {
var storedVendors = service.store.peekAll('vendor').filter((vendor) => {
return vendor.get('slug') === vendorSlug;
});
if (storedVendors.length) {
storedVendor = storedVendors[0];
}
}
if (!Ember.isNone(storedVendor)) {
service.set('vendorSlug', storedVendor.get('slug'));
return new Ember.RSVP.Promise((resolve) => {
resolve(storedVendor);
});
}
return service.store.queryRecord('vendor', {slug: vendorSlug}).then((vendor) => {
service.set('vendor', vendor);
service.set('vendorSlug', vendor.get('slug'));
return vendor;
});
},
_vendorSlugChanged: function() {
if (this.get("vendorSlug") === this.get("vendor.slug")) {
return;
}
this.ensureVendorLoaded();
}.observes('vendorSlug')
});
Mi piacerebbe poter affermare un paio di scenari qui con l'interazione del negozio. Fornitore già impostato, fornitore caricato dal filtro di sbirciata e venditore caricato dalla query.
Sto anche cercando di fare qualcosa di simile e non riesco a trovare alcuna documentazione sull'argomento. Ho iniziato a guardare alcuni progetti che usano ember e spero di trovare presto alcuni esempi. [Ecco cosa ho finora] (http://pastebin.com/8sMFNdQN) se aiuta a tutti. – cojomojo
@cojomojo come sarebbe il modulo 'MockStore' che hai commentato? – BillPull
vedere la mia risposta per un esempio – cojomojo