【问题标题】:How to create dynamic fixtures for ember integration tests using ember-testing (Qunit) via teabag如何通过teabag使用ember-testing(Qunit)为ember集成测试创建动态夹具
【发布时间】:2013-05-24 11:59:20
【问题描述】:

我的所有东西都可以很好地使用我在这样的固定装置文件中定义的静态固定装置:

var user = {
    id: 1,
    email: "test@testing.com",
    firstName: "Han",
    lastName: "Solo"
};
var userArray = [];
userArray.push(user);
App.User.FIXTURES = userArray; 

但是....如果我想从现有的 Rails 种子数据中动态提取固定数据。 (我将文件重命名为 user_fixture.js.erb)然后执行:

<% @user = User.find_by_email('test@testing.com') %>
var currentUser = <%= UserSerializer.new(@user, :root => false).to_json %>; 
var userArray = [];
userArray.push(user);
App.User.FIXTURES = userArray; 

我的测试失败了。我可以看到数据没有填充 ember 应用程序,但如果我这样做了:

App.User.Fixtures

然后我可以从控制台看到该对象按预期存在。我不知道为什么会这样,有人有什么建议吗?

为了完整起见,这里是我在测试中设置 Ember 的方式(与 Erik Bryn 的示例相同):

module("Home Routes:", {
  setup: function() {
    Ember.run(App, App.advanceReadiness);
  },
  teardown: function() {
    App.reset();
  }
});

这里是 test_helper.js 的内容:

//= require application
//= require_tree .
//= require_self

document.write('<div id="ember-testing-container"><div id="ember-testing"></div></div>');
document.write('<style>#ember-testing-container { position: absolute; background: white; bottom: 45px; left: 45px; width: 640px; height: 384px; overflow: auto; z-index: 9999; border: 1px solid #ccc; } #ember-testing { zoom: 50%; }</style>');

App.rootElement = '#ember-testing';
App.setupForTesting();
App.injectTestHelpers();

function exists(selector) {
    return !!find(selector).length;
};

更新: 我已经发现一个(手指越过唯一的)问题是 Active Model Serializer 正在创建下划线键名,而 Ember 正在期待骆驼化版本。

【问题讨论】:

  • 只是为了澄清您的第一个示例-您会在每个测试或设置夹具中执行此静态夹具工作吗?如果是这样,您将如何将其拆除以清理夹具数据。你还在使用 ember-model 还是 ember-data?
  • 嘿托兰。我正在使用 ember-data,我将添加 test_helper 和负责设置所有内容的测试代码。正如我之前所说,一切都与静态夹具完美配合......
  • 对 - 只是好奇一些缺失的细节是什么样子的:)
  • 有没有办法使用上面显示的设置代码让 CSS 为应用程序正常工作?我只有丑陋的白屏。不知道如何引用我的 rails 应用程序的 CSS。
  • 嘿布兰登。我正在使用teabag,它允许您为测试套件设置资产。显然包括 css。

标签: ember.js ember-data


【解决方案1】:

好的,经过一番折腾后,我开始工作了。正如我在上面的更新中提到的那样,问题在于 ember 需要骆驼化属性,而 Active Model Serializers 会创建 dasherized 属性。

module MyUtilities
  class Base

    # Convert keys from ruby object to camelized strings. e.g: :hello_there_world becomes "helloThereWorld"
    def self.camelize_keys(object)
      r = {}
      object.to_hash.each do |k,v|
        r[k.to_s.camelize(:lower)] = v
      end
      r
    end

  end
end


<% 
  user = User.find_by_email('test@testing.com') 
  user_hash = UserSerializer.new(user, :root => false).as_json
  @user = MyUtilities::Base.camelize_keys(user_hash).to_json
%>
var user = <%= @user %>; 
App.User.FIXTURES = [user]; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2015-10-11
    • 2017-05-28
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多