1

我正在尝试使用ember-cliandember-cli-ic-ajax用于 Ember Data 固定装置。我已导入ic.ajax.defineFixtureicDefineFixture.

icDefineFixture('/users', {
  response: {
    email: 'user@example.com'
  },
  textStatus: 'success',
  jqXHR: {}
});

这不会引发任何错误,所以我知道我正在成功导入该函数。然后我创建一个记录,这没问题:

this.store.createRecord('user', {});

但是当我尝试将其保存在控制器操作中时:

this.get('model').save().then(function() { ... });

我收到 404 错误,因为 ember 数据正在联系我在测试时没有后端的服务器。

我很困惑 Ember Data 应该如何知道使用 ic-ajax 的 ajax 方法。这是我必须手动设置的吗?我还没有找到任何关于它的文档。

谢谢!

4

3 回答 3

1

感谢@kevin-bullaughey 评论,我能够调整 Ember CLI 0.2.0-beta.1 的解决方案:

import DS from 'ember-data';

import ENV from '../config/environment';
import { request } from 'ic-ajax';

var ApplicationAdapter = DS.RESTAdapter.extend();

if (ENV.environment === "test") {
    ApplicationAdapter.reopen({
        ajax: function(url) {
            return request(url);
        }
    });
}

export default ApplicationAdapter;

test环境中,适配器将使用定义的固定装置,并且在oric-ajax中行为不变。developmentproduction

于 2015-03-01T14:15:15.713 回答
1

感谢@ToddSmithSalter 的建议,它让我找到了一个对我的案例非常有效的解决方案。我能够简单地在仅加载在我的测试套件中的文件中重新打开我的适配器并覆盖 ajax 方法:

ApplicationAdapter.reopen({
  ajax: function(url, verb, hash) {
    icRequest(url)
  }
});

我进口ic.ajax.request的地方icRequest

这似乎工作正常,但我看不到为每种类型的 request PUTGETPOSTDELETE等单独注册固定装置的方法。

于 2014-09-18T01:05:22.647 回答
1

我根本不相信 ember-data 使用 ic-ajax,而是使用 jQuery.ajax。在我目前正在编写的应用程序中,我使用 ic-ajax 而不是 $.ajax,仅仅是因为它返回 RSVP 承诺。现在,我正在发出没有 ember-data 的请求。

这是 Ghost 源代码中使用 ic-ajax 发出请求的示例。

设置:https
://github.com/TryGhost/Ghost/blob/master/core/client/utils/ajax.js 用法:https ://github.com/TryGhost/Ghost/blob/master/core/client/controllers /setup.js#L23

关于固定装置,来自 ic-ajax Github 自述文件:

使用 defineFixture 添加固定装置会告诉 ic-ajax 使用匹配 url 的固定装置来解决承诺,而不是发出请求。这允许您在不使用 sinon 等创建虚假服务器的情况下测试您的应用程序。

Example:

ic.ajax.defineFixture('api/v1/courses', {
  response: [{name: 'basket weaving'}],
  jqXHR: {},
  textStatus: 'success'
});

ic.ajax.request('api/v1/courses').then(function(result) {
  deepEqual(result, ic.ajax.lookupFixture('api/v1/courses').response);
});

现在,如果您想将 ic-ajax 与 ember-data 一起使用,您可以覆盖您正在使用的 Adapter 上的 createRecord、deleteRecord 方法。有关 ember-data 如何进行 ajax 调用的示例,请参阅有关 createRecord 的 Ember API 文档:http: //emberjs.com/api/data/classes/DS.Adapter.html#method_createRecord

于 2014-09-16T23:03:10.550 回答