首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ember应用程序工具包如何在验收测试中覆盖应用程序适配器

Ember应用程序工具包如何在验收测试中覆盖应用程序适配器
EN

Stack Overflow用户
提问于 2014-03-03 03:37:39
回答 1查看 460关注 0票数 1
代码语言:javascript
复制
import Application from 'appkit/app';
import Router from 'appkit/router';

function startApp(attrs) {
  var App;

  var attributes = Ember.merge({
    // useful Test defaults
    rootElement: '#ember-testing',
    // LOG_ACTIVE_GENERATION:false,
    // LOG_VIEW_LOOKUPS: false
    LOG_ACTIVE_GENERATION: true,
    LOG_MODULE_RESOLVER: true,
    LOG_TRANSITIONS: true,
    LOG_TRANSITIONS_INTERNAL: true,
    LOG_VIEW_LOOKUPS: true  
  }, attrs); // but you can override;



  Ember.run.join(function(){
    App = Application.create(attributes);
    App.setupForTesting();
    App.injectTestHelpers();
  });

  Router.reopen({
    location: 'none'
  });
  App.reset(); // this shouldn't be needed, i want to be able to "start an app at a specific URL"

  return App;
}

export default startApp;

//问题:我想重写默认的application:adapter,它指向Rest //在我的实际应用程序中,使用Fixture适配器时,我尝试了app.register方法,但//它不工作任何指针。

EN

回答 1

Stack Overflow用户

发布于 2014-04-22 01:33:35

我已经找到了解决这个问题的方法--不过,我会在底部加上一个免责声明。

为了在您的应用程序已经配置为使用另一个适配器时使用Fixture适配器,您需要重新定义您的应用程序适配器,以便它使用DS.FixtureAdapter类。

我看到您正在使用EAK,所以我在创建应用程序的Ember.run函数之前将此代码包含在startApp函数中。

代码语言:javascript
复制
define('myApp/adapters/application', ['exports'], function(exports) {
  exports['default'] = DS.FixtureAdapter;
});

现在,您还需要为应用程序拥有的每个模型定义fixture。您可能不想修改实际的源文件,因为这些文件只用于验收测试,因此重新定义类也能起到作用。

我创建了另一个帮助器,名为setFixtures:

代码语言:javascript
复制
function setFixtures(modelName, fixtures) {
  var model = require('myApp/models/' + modelName)['default'];
  model.reopenClass({
    FIXTURES: fixtures
  });
}

export default setFixtures;

通过将此函数添加为全局函数并将以下代码添加到test-helper.js中,使jshint满意

代码语言:javascript
复制
window.setFixtures       = require('myApp/tests/helpers/set-fixtures')['default'];

我现在已经准备好在我的每个模块中使用它进行测试:

代码语言:javascript
复制
module('Acceptances - My fixtures', {
  setup: function() {
    setFixtures('my-model', [
      { id: 1, name: 'John Madden'     },
      { id: 2, name: 'AEIOUAEIOUAEIOU' }
    ]);
    App = startApp();
  }
});
// your tests below

免责声明:我走了这条孤单的路,这是我唯一知道的一条路,但似乎DS.FixtureAdapter仍然有一些问题(在写这篇文章的时候),而且它与你对DS.RESTAdapter的期望有几个不同(更多信息here)。但是,您可以通过调整您的fixture在测试中的外观来克服这一问题。

最大的问题是关于FixtureAdapter和hasMany的关系,特别是那些异步的关系。There's a lot of information in the GitHub issues section of ember data,当然他们会及时得到解决,但目前,这是相当不稳定的。

我确实达到了一个点,那就是我必须强制修改源代码以使FixtureAdapter满意,或者为测试动态地重新定义所有模型类--在我看来,这就像是为测试重写了应用程序的一部分。这阻止了我测试许多可能是实际错误的问题(例如,忘记了异步关系?好的,验收测试不会警告您,因为您重新定义了不需要它们的类。)

我现在倾向于Ember-testing-httpRespond。然而,这是其他问题的素材。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22132406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档