我有一个 ember 服务,主要关注的是为特定模型和模型的后代获取数据。我在服务中使用它的原因是因为这种特定类型的路由使用的是不是主键的 slug,因此需要执行 astore.query
而不是store.find
. 当我们获取这个模型时,我有一些逻辑可以查看 ember 存储,看看我们是否可以在进行 api 查询之前从那里加载它。此外,该供应商正在关注 slug 更改并基于此更新当前模型。
我遇到的问题是,当涉及到如何测试这样的事情时,这似乎只有很少的文档。事实上,我在这里的指南中没有看到关于测试服务的部分http://guides.emberjs.com/v2.1.0/
这是相关服务的一个片段。
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')
});
我希望能够通过商店交互在这里断言几个场景。供应商已经设置,供应商从 peek 过滤器加载,供应商从查询加载。