首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过teabag为成员集成测试创建动态夹具(Qunit)

如何通过teabag为成员集成测试创建动态夹具(Qunit)
EN

Stack Overflow用户
提问于 2013-05-24 11:59:20
回答 1查看 995关注 0票数 2

我使用静态夹具很好地完成了所有工作,我在这样的夹具文件中定义了这些工具:

代码语言:javascript
复制
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),然后执行:

代码语言:javascript
复制
<% @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应用程序,但是如果我这样做了:

代码语言:javascript
复制
App.User.Fixtures

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

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

代码语言:javascript
复制
module("Home Routes:", {
  setup: function() {
    Ember.run(App, App.advanceReadiness);
  },
  teardown: function() {
    App.reset();
  }
});

以下是test_helper.js的内容:

代码语言:javascript
复制
//= 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序列化程序正在创建下划线键名,而Ember正在期待CAMEL化版本)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 17:47:06

好吧,经过一段时间后,我让它开始工作了。正如我在上面的更新中所提到的那样,问题在于ember希望获得camelised属性,而Active Model序列化程序则会创建dasherized属性。

代码语言:javascript
复制
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]; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16734448

复制
相关文章

相似问题

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