首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >约曼发电机-余烬测试建立测试余烬-数据模型?

约曼发电机-余烬测试建立测试余烬-数据模型?
EN

Stack Overflow用户
提问于 2014-01-29 15:54:27
回答 1查看 545关注 0票数 1

建立用于测试Ember数据模型的DS.store的最佳方法是什么?

更新:这是一把小提琴:http://jsfiddle.net/jdcravens/B7Jy6/

我正在使用约曼余烬生成器,我想为QUnit和Mocha测试提供一个简单的入门设置指南。

我使用以下方法引导了一个项目:

代码语言:javascript
复制
$ yo ember --karma

到目前为止,我不能做的是从我的测试中访问余烬数据存储?

首先,我尝试做一个类似的设置-数据测试套件抽象存储设置到初始化程序。

代码语言:javascript
复制
document.write('<div id="ember-testing-container"><div id="ember-testing"></div></div>');
document.write('<style>#ember-testing-container { position: absolute; background: white; bottom: 0; right: 0; width: 800px; height: 500px; overflow: auto; z-index: 9999; border: 5px solid #ccc; } #ember-testing { zoom: 80%; }</style>');

Ember.testing = true;
App.rootElement = "#ember-testing";

App.setupForTesting();
App.injectTestHelpers();

//Ember.run(App, App.advanceReadiness);

// Error: Assertion Failed: You cannot defer readiness since the `ready()` hook 
// has already been called.

window.setupStore = function(options) {
    var env = {};
    options = options || {};

    var container = env.container = new Ember.Container();

    var adapter = env.adapter = (options.adapter || DS.Adapter);
    delete options.adapter;

    for (var prop in options) {
      container.register('model:' + prop, options[prop]);
    }

    container.register('store:main', DS.Store.extend({
      adapter: adapter
    }));

    container.register('serializer:-default', DS.JSONSerializer);
    container.register('serializer:-rest', DS.RESTSerializer);
    container.register('adapter:-rest', DS.RESTAdapter);

    container.injection('serializer', 'store', 'store:main');

    env.serializer = container.lookup('serializer:-default');
    env.restSerializer = container.lookup('serializer:-rest');
    env.store = container.lookup('store:main');
    env.adapter = env.store.get('defaultAdapter');

    return env;
};

window.createStore = function(options) {
    return setupStore(options).store;
};

window.start = function () {};
window.stop = function () {};

从我的测试来看:

代码语言:javascript
复制
/*global describe, it */
'use strict';
(function () {

//var store = App.__container__.lookup('store:main');
//console.log(store);

// LOG: undefined
// PhantomJS 1.9.6 (Mac OS X): Executed 0 of 0 ERROR (0.684 secs / 0 secs)

//So then, I try to generate use createStore() from the initializer.

  var store;

  module("unit/model - DS.Activity", {
    setup: function() {
      store = createStore();
    },

    teardown: function() {
      store = null;
    }
  });

  test('display_id property returns correct value', function() {
    Ember.run(function () {
      var activity = store.push('App.Activity', {'id': 1, 'display_id': 'activity1'});
      var result = activity.get('display_id');
      equal(result, 'activity1', "display_id was " + result);
    });  
  });

// PhantomJS 1.9.6 (Mac OS X) unit/model - DS.Activity display_id property returns
// display_id FAILED
// Died on test #1 at ../node_modules/qunitjs/qunit/qunit.js:42
// at ../test/spec/test.js:58
// at ../test/spec/test.js:60: No model was found for 'App.Activity'
// Error: No model was found for 'App.Activity'
// PhantomJS 1.9.6 (Mac OS X): Executed 1 of 1 (1 FAILED) ERROR (0.743 secs / 0.003 secs)

})();

所以问题是..。使用Karma基本设置访问存储和测试Ember数据模型的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 23:40:44

我对小提琴做了几处修正:http://jsfiddle.net/jdcravens/B7Jy6/

代码语言:javascript
复制
  module("unit/model - App.Activity", {
    setup: function() {
      store = createStore({activity: App.Activity}); // Pass the model
    },

    teardown: function() {
      store = null;
    }
  });

然后在测试中,注意“活动”,而不是“应用程序”:

代码语言:javascript
复制
  test('display_id property returns correct value', function() {
    Ember.run(function () {
      var activity = store.push('activity', {'id': 1, 'display_id': 'activity1'});
      var result = activity.get('display_id');
      equal(result, 'activity1', "display_id was " + result);
    });  
  }); 

我还决定将活动记录的创建移到安装程序中:

代码语言:javascript
复制
  module("unit/model - App.Activity", {
    setup: function() {
      store = createStore({activity: App.Activity}); // Pass the model

      Ember.run(function () {
        activity = store.push('activity', {
          'id': 1,
          'display_id': 'activity1'
        });
      },

    teardown: function() {
      store = null;
    }
  });

然后,在测试中:

代码语言:javascript
复制
  test('display_id property returns correct value', function() {
      var result = activity.get('display_id');
      equal(result, 'activity1', "display_id was " + result);
    });  
  }); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21436044

复制
相关文章

相似问题

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