ruby-on-rails - 具有序列化字段的工厂女孩

标签 ruby-on-rails serialization rspec factory-bot

我遇到了工厂女孩的问题,它给我一个 undefined method 'each' for #<String:0x0000012915bc18> 错误,其中包含来自工厂的序列化字段。

在ActiveRecord中,它运行each没有问题,因为返回的对象是一个数组。

我的问题是:我应该如何格式化工厂中的序列化对象?事件记录返回它的方式?或者它实际存储在数据库中的方式? (即序列化与否?)rspec 在保存和检索事件记录时会执行相同的序列化魔法吗?

这是我正在做的事情的简化版本:

Tvdb.rb--模型

class Tvdb < ActiveRecord::Base

  set_table_name 'tvdb'
  serialize :cache

  def self.episodes(id)
    cached = self.find_by_term('episodes_' + id.to_s)
    return cached.cache unless cached.nil?

    info = self.series_info(id)
    request = info.episodes

    Tvdb.create(:term=>'episodes_' + info.id.to_s, :cache=>request)
    return request
  end
end

然后在我的 Series.rb 模型中我可以这样做:

class Series < ActiveRecord::Base

  def episodes
    episodes = Tvdb.episodes(self.tvdb_id)
    episodes.each do |episode|
      puts episode.name
    end
  end

end

Tvdb.rb -- 工厂

FactoryGirl.define do
  factory :series1_episodes, :class=>Tvdb do
    term 'episodes_79488'
    cache %q([#<AnObject::Module:0x000001290a4568 @value="dsada"]>,#<AnObject::Module:0x0002321290a4568 @value="dsadsada"]> )
  end  
end

注意:缓存值的语法在这里可能无效,我尝试缩短一个非常长的序列化对象。重点是它在我的模型中有效,但在 rspec 中无效

在我的 *series_spec.rb* 中调用此:

series.episodes.count.should_not == 0

给出了这个错误

undefined method 'each' for #<String:0x0000012915bc18>

最佳答案

在工厂中,不应将 cache 设置为序列化值,而应设置为实际值。

FactoryGirl.define do
  factory :series1_episodes, :class => Tvdb do
    term 'episodes_79488'
    cache ["foo", "bar"]
  end
end

关于ruby-on-rails - 具有序列化字段的工厂女孩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281112/

相关文章:

ruby-on-rails - 按子属性过滤父项,但预先加载所有子项

ruby-on-rails - 无论如何要让 Rails/Rack 应用程序告诉 Web 服务器断开连接

.net - 将 System.Data.DataSet 导入 Excel 的最简单方法是什么?

php - JMS 反序列化对象中的 ArrayCollection

ruby-on-rails - 如何在JBuilder中使用RSpec?

ruby-on-rails - 测试未通过 : undefined method `authenticate!' for nil:NilClass?

ruby-on-rails - 如何在 Rails 中使用 ActiveStorage 正确进行模型测试?

javascript - 如何在 Capybara 验收测试中 stub JavaScript 延迟?

ruby-on-rails - 如何提高 ILIKE Performance?

java - 节点流是什么意思?